我有三个类: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命名空间内。

10-04 11:49