我有三个类:TopClass
,其中包含BottomClass
指针的实例。 BottomClass
包含一个指向HelperClass
的指针。 HelperClass
保留指向TopClass
的指针。循环依赖项 pop ,并且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错误,因为我尝试使用正向声明的类型。我只知道有一种方法可以解决此问题,我敢肯定我已经做过,但是我无法终生记住我应该做的事情。有什么帮助吗?
最佳答案
问题是您要在TopLevel
命名空间之外声明foo
,因此编译器永远不会找到foo::TopLevel
类。
尝试将TopLevel
的前向声明移到foo
命名空间内。