重叠的收割台夹杂物
Overlapping header inclusions
我遇到了一个需要帮助的简单问题。
我基本上有两个类[A&B](每个.cpp文件中都有一个类和它们自己的.h)
A.h #includes the contents from B.h
B.h #includes the contents from A.h
我包含了一个头保护,但是,如果我试图声明任何类型a或B的指针或对象,我会得到以下错误:
错误1错误C2061:语法错误:标识符'B'
错误3错误C2143:语法错误:缺少";"在"*"之前
错误4错误C4430:缺少类型说明符-假定为int。注:C++不支持默认的int
有什么办法吗?声明就在那里——我只是不知道它为什么不接受它。
如果只需要指针,则只需要前向声明。与其将头包含在彼此中,不如简单地向前声明需要指针指向的类。例如,在A.h
中,您应该有:
class B;
在CCD_ 2中反之亦然。
您当前出现问题的原因是,A.h
中有一个B*
,因此它包括B.h
,而B.h
中有一个子A*
,因此它包含A.h
。但是,include保护防止A.h
的内容再次被包含,因此B
无法编译。
让我们举一个简单的例子。这是A.h
:
#ifndef A_H
#define A_H
#include "B.h"
class A {
B* b;
};
#endif
这是B.h
:
#ifndef B_H
#define B_H
#include "A.h"
class B {
A* a;
};
#endif
假设我们正在编译A.h
。首先,我们检查通过的包含防护装置。然后我们包括B.h
,它也有一个通过的包含保护,所以让我们展示包含:
#include "A.h"
class B {
A* a;
};
class A {
B* b;
};
现在这个B.h
包括A.h
,但A.h
中的include保护不会再次通过,所以include不会带来任何内容
class B {
A* a;
};
class A {
B* b;
};
现在来看B
的定义。它有一个A*
,但B.h
0尚未声明。这会给你一个错误。
相关文章:
- Ardunio UNO解决了多个重叠的定时器循环
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 算术序列与区间的最大重叠
- 按顺序声明的字符数组重叠
- 拆分重叠段
- 纹理单位重叠?渲染了错误的纹理
- 什么可以防止类中相邻成员重叠
- 对多个(可能)重叠范围进行分区的最简单算法
- 英特尔将指令存储在重叠的内存区域
- 我可以在同一条链上生成多个协程而不会重叠吗?
- 使用迭代器 C++ 删除矢量中的重叠字符串
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 如何在opencv C++中合并重叠的矩形?
- 如何在c/c++中检查两个任意内存范围是否重叠
- 为什么重复的空基存储不与 vtable 指针重叠?
- Qt-grabtoimage()和scale生成两个重叠的图像
- 使用命名管道块的读取文件,尽管使用重叠
- 视觉C++合并重叠的字符串
- 非重叠连续子数组的最大长度总和
- 重叠的收割台夹杂物