相互包含在C++中..它是如何工作的?

Arn*_*Boy 7 c++ include header-files

可能重复:
当存在循环依赖时,#include的正确方法是什么?

我是C++的新手,并在标题中提出了问题.或者更确切地说:如果Ah包括Bh和Bh包含Ah,我会得到一条错误消息,因为"include#file"C:... \啊"包括它自己".档案:Bh

我找不到解决这个问题的方法,而我的一般设置几乎要求这些类之间的关系.是否有可能使这项工作?

xeo*_*111 7

在头文件中使用Include警卫. http://en.wikipedia.org/wiki/Include_guard

#ifndef MYHEADER_H
#define MYHEADER_H

//add decls here 

#endif
Run Code Online (Sandbox Code Playgroud)

这样,如果您的头文件被多次包含,编译器会忽略它们.

另外作为一个经验法则,如果你包括有Ah的Bh,最好在你的应用程序中包含Ah和Bh而不是依赖于Bh的包含

也只在头文件中放置声明.

在头文件中不惜一切代价避免使用定义.


Nic*_*las 6

简单:不要让Ah包含Bh,反之亦然.

通常,头文件应尽可能少地包含.您可以使用前向声明来绕过很多包含.绝对必须在标题中包含某些内容的唯一情况是,在该标题中是否存在用作非引用的对象.

所以避免这样做.使用Pimpl避免将类成员放入标题中.除非是模板代码或者您需要内联支持,否则不要在标题中编写实际代码.

最糟糕的情况是你需要创建一个定义Ah和Bh需要的Ch.