我有三个类:一个TopClass
,它包含一个BottomClass
指针的实例。 BottomClass
包含指向HelperClass
的指针。 HelperClass
保留指向TopClass
的指针。弹出循环依赖关系,HelperClass
中需要转发声明。
以下代码片段说明了所有这些:
#include "BottomLevel.h"
namespace foo
{
class TopLevel
{
private:
BottomLevel* item;
};
}
-
#include "HelperClass.h"
namespace foo
{
class BottomLevel
{
private:
HelperClass* item;
};
}
-
class TopLevel; // forward declaration here
namespace foo
{
class HelperClass
{
public
HelperClass(TopLevel* item);
};
}
尝试在实现文件中执行操作时会出现问题。如果我在cpp文件中#include "TopClass.h"
,则会收到编译错误,指出“未找到重载的成员函数 - 使用未定义的类型'TopLevel
'”(错误C2511和C2027)。
然后,如果我不执行#include
我仍然留下C2027错误,因为我尝试使用前向声明的类型。
我只知道有一种方法可以解决这个问题,我确信我之前已经做过了,但我不能为我的生活记住我应该做的事情。有什么帮助吗?
答案 0 :(得分:6)
问题在于您在TopLevel
命名空间之外声明foo
,因此编译器永远不会找到类foo::TopLevel
。
尝试在TopLevel
命名空间内移动foo
的前向声明。
答案 1 :(得分:0)
您需要表单的正向声明
namespace foo {
class TopLevel;
class BottomLevel;
class HelperClass;
}
然后顺序不重要[因为你使用指针]