解决C++中 3 个类的循环包含
Resolve circular include of 3 classes in C++
我有 3 个类,我将它们称为 A、B 和 C(此示例中的名称是任意的(。 所有这 3 个类都包含一个头文件和一个 cpp 文件。
我有以下依赖项:
A- 需要知道 B,因为 A 具有类型 B 的成员 B
- 需要知道 A 和 C,因为 B 具有两种类型的成员 C
- 需要知道 A,因为 C 具有类型 A 的成员
我已经尝试了几个选项(在这里包括这个标题,在那里包括类的前向声明(,但编译从来没有成功。我也无法从仅解决 2 个类之间循环包含问题的问题的答案中提取任何有用的信息。
编辑: 这是我当前设置的最小(希望足够(示例:
A.h
class A {
private:
B myB;
};
B.h
class B {
private:
A* myA;
C myC;
};
C.H
class C {
private:
A* myA;
}
我也许还应该注意到,B::myA 和 C::myA 总是指向同一个 A 实例。
由于类C
只包含一个指向类A
的指针,它不需要A
或B
的完整定义(它不使用(; 因此,只需声明A
为类的语句就足够了:
C.H
class A; // Declare that A is a class - then we can have a pointer to it...
class C {
private:
A* myA;
}
类B
需要C
的定义,因为它包含C
的实例;并且,像类C
一样,简单地将A
声明为类(如C.h
中已经做的那样(就可以:
B.h
#include "C.h" // Note: This header already declares "A" as a class!
class B {
private:
A* myA;
C myC;
};
类A
需要定义B
,因为它包含B
的实例。但请注意,B.h
已经包括C.h
:
啊
#include "B.h"
class A {
private:
B myB;
};
请注意,任何其他使用A
、B
和C
中的一个或多个的文件只需要包含A.h
标头,因为这本身将包括其他文件。
相关文章:
- 在命名空间内使用函数的循环包含
- 解决C++中 3 个类的循环包含
- 循环包含依赖项/转发声明
- 由于循环包含导致Visual C++生成错误
- 变量已在 .obj 中定义,但没有循环包含
- 模板化函数导致循环包含
- 扩展类c++的循环包含问题
- 不能使用循环包含转发声明
- 循环包含导致链接错误的语句
- C++问题创建类对象和循环包含
- C++调用没有循环包含的成员函数
- C++循环包含
- 循环包含在C++中
- 在必须传回值时避免循环包含
- 循环包含在c++头文件中隐藏实现细节的技巧
- 错误:"{"标记之前的预期类名 - 似乎找不到任何循环包含
- 循环包含,如何在不更改类层次结构的情况下解决此问题
- 由循环包含的好友功能
- 互惠友元成员函数=循环包含声明
- 在c++中,由于类中的枚举,循环包含