[英]Why does a forward declaration not fix the circular dependency?
我有三个类:一个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错误,因为我尝试使用正向声明的类型。
我只知道有一种方法可以解决此问题,我确定我之前已经做过,但是我无法终生记住我应该做的事情。 有什么帮助吗?
问题是您要在foo
命名空间之外向前声明TopLevel
,因此编译器永远不会找到foo::TopLevel
类。
尝试在foo
名称空间中移动TopLevel
的前向声明。
您需要表格的前向声明
namespace foo {
class TopLevel;
class BottomLevel;
class HelperClass;
}
然后顺序就无关紧要了(因为您使用了指针)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.