1. 程式人生 > >定義2個有關聯的類時,產生的使用了未定義類型的錯誤

定義2個有關聯的類時,產生的使用了未定義類型的錯誤

return 一個 class bsp 功能 私有 報錯 ring 編譯

定義了A類的時候,需要定義一個B類來完善A的功能,A類當中有 返回類型為B的函數 ,定義A之前,先聲明了B,且B作為A的友元,需要訪問A的私有成員。

eg:

class B;

class A

{

public:

friend class B;

A();

B fun1() {return B(*this)} // 返回一個B類型的對象

private:

string s;

}

class B

{

public:

B (A&);

}

// B A::fun1() {return B(*this)} 正確的定義

因為B的定義在A的後面,所以在具體定義fun1這個函數時,B只有聲明而沒有具體的定義。導致編譯的時候會報錯。將fun1放在B的定義之後定義就可以了,而只在A當中先聲明。

註:類沒有定義之前但是有聲明的時候,可以聲明指向它的指針。而不允許對未定義的類型的引用。

定義2個有關聯的類時,產生的使用了未定義類型的錯誤