我读过this问题


  如果您确实有一个模型,其中A包含B,B包含A,那么这些类似乎无法相互生存。在这种情况下,也许您实际上只有一堂课而不是两堂课。


如果A可能包含B,但B应该始终引用A(如果没有A,B就不会存在),那会是什么情况?

为了说明,这里是一个Cube类,其中可能包含Collider类的对象(即:其他具有碰撞器的多维数据集应与之碰撞)。

class Cube
{
public:
    Cube();
    ~Cube();

    Collider collider; //Optional Collider
}

class Collider
{
public:
    Collider(Cube & parentReference) : parent(parentReference) {}

private:
    Cube & parent;
}


在这种情况下,Cube和Collider实际上应该是两个单独的类,如何在仍然能够在Collider中存储对Cube的引用的同时避免循环依赖呢?

编辑:此问题已得到解答。但是,有谁愿意让我知道为什么这个问题被否决,以便将来我会改变我的方式?重复?没有足够的信息?初学者的问题太多了吗?让我知道:)

最佳答案

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

关于c++ - C++类之间的循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39722036/

10-09 13:25