【发布时间】:2010-09-28 14:33:56
【问题描述】:
我是 C++ 新手,但我无法在网上找到这个(很可能是微不足道的)问题的答案。我在编译一些两个类相互包含的代码时遇到了一些麻烦。首先,我的#include 语句应该放在宏的内部还是外部?在实践中,这似乎并不重要。但是,在这种特殊情况下,我遇到了麻烦。将#include 语句放在宏之外会导致编译器递归并给我“#include 嵌套太深”的错误。这对我来说似乎很有意义,因为在调用 #include 之前没有完全定义任何类。然而,奇怪的是,当我尝试将它们放入其中时,我无法声明其中一个类的类型,因为它无法识别。本质上,这就是我要编译的内容:
啊.h
#ifndef A_H_
#define A_H_
#include "B.h"
class A
{
private:
B b;
public:
A() : b(*this) {}
};
#endif /*A_H_*/
B.h
#ifndef B_H_
#define B_H_
#include "A.h"
class B
{
private:
A& a;
public:
B(A& a) : a(a) {}
};
#endif /*B_H_*/
main.cpp
#include "A.h"
int main()
{
A a;
}
如果有什么不同,我使用的是 g++ 4.3.2。
为了清楚起见,一般来说,#include 语句应该放在哪里?我一直看到它们超出了宏的范围,但我清楚地描述的场景似乎打破了这个原则。提前感谢任何帮助者!如果我犯了任何愚蠢的错误,请允许我澄清我的意图!
【问题讨论】:
-
类不包含任何内容。
标签: c++ recursion header include