C ++类之间的循环依赖关系

时间:2016-09-27 10:15:49

标签: c++ circular-dependency

我在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>的

编辑:此问题已得到解答。但是,是否有人能够让我知道为什么这个问题被贬低,这样我将来会改变我的要求?重复?信息不足?太多的初学者问题?请告诉我:)。

2 个答案:

答案 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)

你可以做前瞻性声明。请参阅wikipediathis question

有关您示例的代码,请参阅@Ivan Rubinson的答案。