如何实现彼此引用的类?

Kid*_*d24 1 c++ circular-reference

我是C++编程的新手,所以也许你会发现我的问题太愚蠢了.对此感到抱歉,但我想知道如何实现这种Java风格的结构:

#include "B";
class A {
   B objB;
}
---
#include "A";
class B {
   A objA;
}
Run Code Online (Sandbox Code Playgroud)

编译器疯狂试图理解这段代码.你能告诉我一个可能的解决方案吗?谢谢!

tem*_*def 5

此代码在C++中是非法的,编译器拒绝它是正确的.问题是,如果在类型B的对象中有一个类型为A的具体对象,反之亦然,那么任何一个对象的大小都没有有意义的定义.特别是,C++中的对象每个必须至少有一个字节.因此,考虑到A型(称它为对象a),必须有存储的一个字节a,a.objB.objA,a.objB.objA.objB.objA,等等.事实上,你需要无限的存储空间,因为总是有一个目标进一步嵌套这些对象里面!

要解决此问题,您需要更改此设置,以便分别存储指向 A和B中B类和A类对象的指针.这会破坏链,因为当A*指针指向一个A对象时,指针本身不是一个A对象,因此只使用四个字节.一旦你有了这个,你可以使用前向声明来声明这些指针.例如:

档案:啊:

class B;
class A {
     B* objB;
};
Run Code Online (Sandbox Code Playgroud)

档案:Bh:

class A;
class B {
     A* objA;
};
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!