类的循环引用解决办法
类的循环引用//文件Interface.h#include Worker.hclass CInterface{public:CWorker m_worker}//文件Wo
类的循环引用
//文件Interface.h
#include "Worker.h"
class CInterface
{
public:
CWorker m_worker;
};
//文件Worker.h
#include "Interface.h"
class CWorker
{
public:
CWorker(CInterface* pInterface);
};
上面的代码好像循环引用了,编译通不过。如何避免这种情况?
[解决办法] CWorker m_worker;你这肯定要看到完整定义,编译器才能生成代码呀,因为这要调用默认构造函数呀
对于CInterface来说CWorker是不完全类型
不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数.
如果非得用到不完全类型,可以单独建立一个头文件,
内容是
class CInterface;
class CWorker;
然后在CInterface, CWorker分别包含这个头文件就可以了
[解决办法]
//文件Interface.h
#include "Worker.h"
class CInterface
{
public:
CWorker m_worker;
};
//文件Worker.h
class CInterface;
class CWorker
{
public:
CWorker(CInterface* pInterface);
};
[解决办法]循环引用很正常,特别是在parent-child的模式下。
楼主你可以用前置声明。因为这里面只用到了指针,没有细节,所以可以前置声明:
child.h:
class parent;
class child
{
public:
child(parent* parent_obj); // 没有使用parent的细节
}
child.cpp:
#include "child.h"
#include "parent.h"
child::child(parent* parent_obj)
{
// 使用parent的细节。
}