我在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
(可能是间接的),从而产生循环依赖关系?