C++ 之间的循环依赖 类

Circular Dependencies between C++ classes

我在 this 问题中读到

If you really have a model where A contains B and B contains A then these classes appear to be incapable of living without each other. In which case perhaps you only really have one class and not two.

如果 A 可能 包含 B,但 B 应该始终引用 A(没有 A 就不能存在 B)会怎样?

为了说明,这里有一个 Cube class,它可能包含 Collider class 的对象(IE:其他带有碰撞器的立方体应该与它发生碰撞)。

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

    Collider collider; //Optional Collider
}

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

private:
    Cube & parent;
}

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

编辑:此问题已得到解答。但是,是否有人愿意让我知道为什么这个问题被否决了,这样我以后会改变我的提问方式?复制?没有足够的信息?太多的初学者问题?请告诉我:)

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.

你可以做前向申报。参见 wikipedia and this question

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