强制使用,即使已经被列入了类的头向前声明(Forced to use forward declara

2019-09-23 00:38发布

我有一个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的提前声明不应该是必要的,应该吗?

Answer 1:

对于这样的效果的一个常见原因是头文件之间的循环依赖关系。

是否foo.h包括windows.h (可能间接地),创建一个循环依赖?



Answer 2:

你需要的完整定义fooC无论如何,因为它直接包含(而不是由指针或引用)的WindowC 。 就像@joval说,它不应该是必要的。 什么样的编译器错误的你好吗? 我会寻找简单的错误,就像遗忘包括类定义后防护装置或分号。



文章来源: Forced to use forward declaration even though the header of the class was already included
标签: c++ class