我有两个班级:
A类和B类
A类在名称空间Common :: subnamespace1
下声明B类在名称空间Common :: subnamespace2
下声明A类和B类都在名称空间Common下,但在不同的子名称空间下。
我的问题如下:
在B类头文件中包含A类是可以的 但是在A类中包含B类标题并在其中声明类型B的成员会导致 编译错误未定义类型'B'。
我尝试过使用前向声明来避免循环依赖。但仍然存在错误。
实际上我很困惑我必须使用内含物的顺序。
注意:我没有发布代码,因为我只是想知道相互声明或包含类的确切顺序或方法。
任何帮助将不胜感激。
答案 0 :(得分:1)
#include
另一个类'定义放入标题中。 对于你的情况,我假设B需要A的定义,而不是相反。您的标题应如下所示:
A.H:
namespace Common {
namespace subnamespace2 {
class B;
}
namespace subnamespace1 {
class A {
void foo(subnamespace2::B& b); //reference, parameter -> fwd-decl
subnamespace2::B* pB; //pointer -> fwd-decl
};
}
}
B.h:
#include "A.h"
namespace Common {
namespace subnamespace2 {
class B {
subnamespace1::A a; //direct member -> def needed
void bar() {
a.foo(*this); //inline use -> def needed
}
};
}
}