C++ 解决C+中3个类的循环包含问题+;
我有3个类,我将它们称为A、B和C(本例中的名称是任意的)。 这三个类都由头文件和cpp文件组成 我有以下依赖项:C++ 解决C+中3个类的循环包含问题+;,c++,dependencies,include,header-files,C++,Dependencies,Include,Header Files,我有3个类,我将它们称为A、B和C(本例中的名称是任意的)。 这三个类都由头文件和cpp文件组成 我有以下依赖项: A需要知道B,因为A有一个类型为B的成员 B需要知道A和C,因为B有这两种类型的成员 C需要知道A,因为C有一个A类型的成员 我已经尝试过几个选项(包括这里的头,那个里的类的前向声明),但编译从来并没有成功过。我也无法从只解决两个类之间的循环包含问题的答案中提取任何有用的信息 编辑: 下面是我当前设置的一个最小(希望足够)示例: A.h A类{ 私人: B多年电价; }; B
- A需要知道B,因为A有一个类型为B的成员
- B需要知道A和C,因为B有这两种类型的成员
- C需要知道A,因为C有一个A类型的成员
A.h
A类{
私人:
B多年电价;
};
B.h
B类{
私人:
A*myA;
C myC;
};
C.h
C类{
私人:
A*myA;
}
我也许还应该注意到,B::myA和C::myA总是指向同一个A实例。因为类
C
只包含指向类A
的指针,它不需要A
或B
的完整定义(它不使用);因此,只要一条声明a
为类的语句就足够了:
C.h
A类;//声明A是一个类-然后我们可以有一个指向它的指针。。。
C类{
私人:
A*myA;
}
类B
需要C
的定义,因为它包含C
的实例;而且,就像classC
,简单地将A
声明为一个类(正如在C.h
中已经做的那样)就可以:
B.h
#include“C.h”//注意:此标题已将“A”声明为类!
B类{
私人:
A*myA;
C myC;
};
类A
需要B
的定义,因为它包含B
的实例。但是请注意,B.h
已经包括C.h
:
A.h
#包括“B.h”
甲级{
私人:
B多年电价;
};
请注意,使用
A
、B
和C
中的一个或多个的任何其他文件只需要包含A.h
头,因为这本身就包括其他文件。我已经尝试了几个选项(在此处包含此头,在此处转发类声明),但编译从未成功。
向前声明是一条路,我们需要一个。向我们展示您的类的(可能缩写)声明和定义,我100%相信这里的人会为您的问题提供解决方案(或者可能不止一个解决方案)。我们确实需要看到一个清晰的示例,说明您正在尝试做什么,特别是关于哪些成员是指针/引用而不是整个对象。目前,我可以理解你的解释,即每个A都包含一个B,然后每个B都包含一个A,这是不可行的,因为这会导致无穷大。@TheUndeadFish请求的示例已经添加。非常感谢,在将您的解决方案应用于我的项目并在C.cpp中添加了A.h之后,它的编译没有问题。