我在this问题中读到了
如果你真的有一个模型,其中A包含B而B包含A,那么这些类似乎无法彼此生活。在这种情况下,也许你只有一个班而不是两个班。
如果A 可能包含B,那么情况会怎样?但是B应该总是引用A(如果没有A,B不能存在)?
为了说明,下面是一个可能包含Collider类对象的Cube类(IE:其他具有碰撞器的立方体应该与它碰撞)。
class Cube
{
public:
Cube();
~Cube();
Collider collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
在这种情况下,Cube和Collider应该是两个单独的类,如何避免循环依赖,同时仍然能够在 Collider中存储对 Cube 的引用/ em>的
编辑:此问题已得到解答。但是,是否有人能够让我知道为什么这个问题被贬低,这样我将来会改变我的要求?重复?信息不足?太多的初学者问题?请告诉我:)。
答案 0 :(得分:3)
class Collider;
class Cube
{
public:
Collider* collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
声明Collider的存在并在以后定义它。 C(++)允许指向不完整类型的指针。 这是more info about forward declaration。
答案 1 :(得分:0)
你可以做前瞻性声明。请参阅wikipedia和this question。
有关您示例的代码,请参阅@Ivan Rubinson的答案。