2016-09-27 130 views
0

我读过的this疑问,循环依赖

如果你真的有其中A含有B模型和B包含然后这些类似乎是不能独立生活,而不相互的。在这种情况下,也许你只有一个班,而不是两个班。

会的情况是如果一个可能含有B,但乙方应始终具有对一个参考(B无A不存在)?

为了说明,继承人可能包含Collider类(IE:其他具有碰撞器的立方体应该与它碰撞)的对象的立方体类。

​​

在像这样的情况下,其中立方和对撞机真正应该两个不同的阶级,一个人如何避免循环依赖,同时还能够存储在撞机立方参考?

编辑:此问题已被回答。然而,是否有人足够让我知道为什么这个问题被低估了,这样我会改变我未来的问题?重复?没有足够的信息?太多的初学者问题?请让我知道:)

+0

在你的'类Cube'中,我要么使用Collider * collider,并检查它是否为空或者使用'boost :: optional optionalCollider'。 – AlexanderS

+0

无论哪种方式,碰撞和多维数据集类都不需要包含对方的标题?这不会导致循环依赖吗? – Sam

+0

是的,但正如styko在下面的答案中写的,您可以添加一个前向声明来解决循环问题。 – AlexanderS

回答

3
class Collider; 

class Cube 
{ 
public: 
    Collider* collider; //Optional Collider 
} 

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

private: 
    Cube & parent; 
} 

声明碰撞的存在,并在稍后定义它。 C(++)允许指向不完整的类型。 Here's more info about forward declaration

+0

这澄清了我的疑问,谢谢! – Sam

0

你可以做前向声明。见wikipediathis question

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

+1

为什么downvote?我刚刚评论过伊凡鲁宾逊的回答,添加了名称“前向声明”? – styko

+0

我很困惑,也因为迟到而感到沮丧。人们至少应该让海报知道为什么。感谢您的帮助! – Sam

+0

我想这是因为你的答案很短,缺乏实质性? SO社区有时可能会很艰难。 –