【发布时间】:2012-08-11 20:56:29
【问题描述】:
我知道之前有人问过与此类似的问题,但经过研究,我仍然对循环标题包含有疑问。
//FooA.h
#ifndef H_FOOA
#define H_FOOA
#include "foob.h"
class FooA{
public:
FooB *fooB;
};
//FooB.h
#ifndef H_FOOB
#define H_FOOB
class FooA;
class FooB{
public:
FooA *fooA;
};
现在,如果我有两个循环依赖项,这就是我在 stackoverflow 上看到人们解决问题的方式。我唯一的问题是,在我的 main.cpp 中,我必须先包含 fooa.h,然后再包含 foob.h
//main.cpp the right way
#include "fooa.h"
#include "foob.h"
//main.cpp that will surely get a compile error
#include "foob.h"
#include "fooa.h"
现在我的问题是“有没有一种方法可以转发声明这些类,让我不必关心在 main.cpp 中包含头文件的顺序?”
【问题讨论】:
-
正如答案所指出的,您可以在两个文件中使用前向声明。如果情况比较复杂,你可以从
foob.h#include "fooa.h",这样可以保证你想要的包含顺序。 -
示例代码的包含中没有任何循环。如果您添加缺少的#endif,一切都很好。你得到什么编译错误?
标签: c++ header header-files circular-dependency