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

Ant*_*ony 1 c++ compiler-errors circular-dependency

我有三个类:a TopClass包含一个BottomClass指针实例.该BottomClass包含一个指向HelperClass.该HelperClass保持一个指针TopClass.弹出循环依赖关系并且需要前向声明HelperClass.

所有这些都通过以下代码片段进行说明:

#include "BottomLevel.h"

namespace foo
{
  class TopLevel
  {
  private:
    BottomLevel* item;
  };
}
Run Code Online (Sandbox Code Playgroud)

-

#include "HelperClass.h"

namespace foo
{
  class BottomLevel
  {
  private:
    HelperClass* item;
  };
}
Run Code Online (Sandbox Code Playgroud)

-

class TopLevel; // forward declaration here

namespace foo
{
  class HelperClass
  {
  public
    HelperClass(TopLevel* item);
  };
}
Run Code Online (Sandbox Code Playgroud)

尝试在实现文件中执行操作时会出现问题.如果我#include "TopClass.h"在cpp文件中,我会收到编译错误,指出"找不到重载的成员函数 - 使用未定义类型' TopLevel'"(ERRORS C2511和C2027).

然后,如果我不这样做,#include我仍然会留下C2027错误,因为我尝试使用前向声明的类型.

我只知道有一种方法可以解决这个问题,我相信我之前已经做过了,但我不能为我的生活记住我应该做的事情.有什么帮助吗?

Kyl*_*utz 6

问题是你在命名空间TopLevel之外声明,foo因此编译器永远不会找到类foo::TopLevel.

尝试移动命名空间TopLevel内的前向声明foo.