1

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

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

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 的前向声明不应该是必要的,不是吗?

4

2 回答 2

2

这种影响的一个常见原因是头文件之间的循环依赖。

是否foo.h包含windows.h(可能是间接的)创建循环依赖?

于 2012-09-25T17:39:38.697 回答
0

您需要反正的完整定义fooC,因为它直接(不是通过指针或引用)包含在WindowC. 就像@joval 说的那样,它不应该是必要的。你得到什么样的编译器错误?我会寻找简单的错误,例如在类定义后忘记包含警卫或分号。

于 2012-09-25T17:18:32.013 回答