我無法讓一個類識別另一個類存在。我相信這是通過參考,但我不確定。在C++中通過引用傳遞?
class A{
public:
A(B b);
};
class B{
public:
B(A a);
};
在class B
的B
構造認識我傳遞A
,但在class A
我不斷收到一個
類型 'B' 無法解析
錯誤。
我無法讓一個類識別另一個類存在。我相信這是通過參考,但我不確定。在C++中通過引用傳遞?
class A{
public:
A(B b);
};
class B{
public:
B(A a);
};
在class B
的B
構造認識我傳遞A
,但在class A
我不斷收到一個
類型 'B' 無法解析
錯誤。
這有什麼做與「過客」,引用或以其它方式。
問題是B
類在您嘗試在類A
中使用它時尚未聲明。
你需要B
類的forward declaration:
class B;
class A{
public:
A(B b);
};
class B{
public:
B(A a);
};
通過指針或引用傳遞時,所以編譯器並不需要知道完整的類型聲明的向前聲明纔有效。如果你按值傳遞,它需要知道完整類型,當'A'被聲明時,'B'的完整聲明還不知道,把'A()'的構造參數改爲'B&b',你應該這樣做構造函數參數(B)的特性,儘管當聲明瞭B時完全聲明瞭A。 –
@RemyLebeau一個前向聲明在這裏可以很好地工作。該定義僅用於構造函數定義。 – juanchopanza
我不斷收到錯誤「字段有不完整的類型'B'」有什麼想法爲什麼? – Zac
要結束你的困惑:你是不是通過引用傳遞,而是通過價值。通過參考看起來像'A(B &b);'或'A(const的乙&b);'但作爲meagar指出,這是不是這裏的問題。 –
圈,我討厭圈。這是如何以往任何時候都需要解決?爲了。定義B的一個實例,在構造函數之前。然而,B類需求,以解決B的構造函數中的第一個定義A類B類必須聲明,請把這個設計,它使我頭暈目眩。如果您使用指針或引用您的構造函數的參數,你可以使用前置聲明。 –