And*_*ter 1 c++ header class include
我遇到了一个需要帮助的简单问题。
我基本上有两个类 [A & B](每个 .cpp 文件中的一个,带有自己的 .h)。
A.h #includes the contents from B.h
B.h #includes the contents from A.h
Run Code Online (Sandbox Code Playgroud)
我已经包含了一个标头保护,但是,如果我尝试声明 A 或 B 类型的任何指针或对象,我会收到以下错误:
错误 1 错误 C2061:语法错误:标识符“B”
错误 3 错误 C2143:语法错误:缺少“;” 前 '*'
错误 4 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
有什么办法吗?声明在那里 - 我只是不知道为什么它不会接受它。
如果你只需要指针,你只需要一个前向声明。无需在彼此中包含标头,只需向前声明您需要指向的类即可。例如,在 中A.h,您应该具有:
class B;
Run Code Online (Sandbox Code Playgroud)
反之亦然B.h。
您目前遇到问题的原因是因为里面A.h有 a B*,所以它包括B.h,并且B.h有A*,所以它包括A.h。但是,包含保护会阻止A.h再次包含的内容,因此B无法编译。
我们举一个简单的例子。这是A.h:
#ifndef A_H
#define A_H
#include "B.h"
class A {
B* b;
};
#endif
Run Code Online (Sandbox Code Playgroud)
这是B.h:
#ifndef B_H
#define B_H
#include "A.h"
class B {
A* a;
};
#endif
Run Code Online (Sandbox Code Playgroud)
所以假设我们正在编译A.h. 首先我们检查包含守卫,它通过了。然后我们 include B.h,它也有一个包含守卫通过,所以让我们展示一下包含:
#include "A.h"
class B {
A* a;
};
class A {
B* b;
};
Run Code Online (Sandbox Code Playgroud)
现在这B.h包含了A.h,但是包含守卫A.h不会再次通过,所以包含没有带来任何东西。我们最终的预处理文件看起来像:
class B {
A* a;
};
class A {
B* b;
};
Run Code Online (Sandbox Code Playgroud)
现在看看 的定义B。它有一个A*,但A尚未宣布。这会给你一个错误。
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |