2015-09-11 103 views
0

我无法让一个类识别另一个类存在。我相信这是通过参考,但我不确定。在C++中通过引用传递?

class A{ 
public: 
A(B b); 
}; 

class B{ 
public: 
B(A a); 
}; 

class BB构造认识我传递A,但在class A我不断收到一个

类型 'B' 无法解析

错误。

+2

要结束你的困惑:你是不是通过引用传递,而是通过价值。通过参考看起来像'A(B &b);'或'A(const的乙&b);'但作为meagar指出,这是不是这里的问题。 –

+0

圈,我讨厌圈。这是如何以往任何时候都需要解决?为了。定义B的一个实例,在构造函数之前。然而,B类需求,以解决B的构造函数中的第一个定义A类B类必须声明,请把这个设计,它使我头晕目眩。如果您使用指针或引用您的构造函数的参数,你可以使用前置声明。 –

回答

3

这有什么做与“过客”,引用或以其它方式。

问题是B类在您尝试在类A中使用它时尚未声明。

你需要B类的forward declaration

class B; 

class A{ 
public: 
    A(B b); 
}; 

class B{ 
public: 
    B(A a); 
}; 
+1

通过指针或引用传递时,所以编译器并不需要知道完整的类型声明的向前声明才有效。如果你按值传递,它需要知道完整类型,当'A'被声明时,'B'的完整声明还不知道,把'A()'的构造参数改为'B&b',你应该这样做构造函数参数(B)的特性,尽管当声明了B时完全声明了A。 –

+2

@RemyLebeau一个前向声明在这里可以很好地工作。该定义仅用于构造函数定义。 – juanchopanza

+0

我不断收到错误“字段有不完整的类型'B'”有什么想法为什么? – Zac