我在C++代码中遇到了一个奇怪的问题,无法弄清楚发生了什么。我知道什么是前向声明,我知道何时使用它们等等。

但是,在我拥有的C++项目中,我被迫要求声明一个已经在包含的 header 中声明的类。看起来像这样

Windows.h:

#ifndef WINDOWS_HH_
#define WINDOWS_HH_

#include "foo.h"

class fooC;                 // If I don't forward declare here, won't compile!?
class WindowC
{
     public:
          WindowC();
          ~WindowC();
     public:
          fooC a;
};
#endif

然后foo.h包含fooC的声明
#ifndef FOO_HH_
#define FOO_HH_
class fooC
{
     public:
            fooC();
            ~fooC();
};
#endif

知道为什么会这样吗?实际的代码是一个大型项目的一部分,并且真的很难弄清楚错误可能是什么...但是我敢肯定,从理论上讲,不需要对fooC进行前向声明,对吗?

最佳答案

造成这种影响的常见原因是头文件之间的循环依赖关系。
foo.h是否包括windows.h(可能是间接的),从而产生循环依赖关系?

10-08 08:57