首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类的循环引用解决办法

2013-12-10 
类的循环引用//文件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);
};

[解决办法]
引用:
这个要根据具体的逻辑了。
导致循环引用了,很大可能是代码的抽象封装有问题了。

比如,把在CWorker里面需要用到CInterface的逻辑抽象成第三个类,这样就可以解决循环引用的问题。

循环引用很正常,特别是在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的细节。
}

热点排行