2015-09-11 137 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