繁体   English   中英

为什么前向声明不能解决循环依赖关系?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM