1. 程式人生 > 其它 >C++中使用成員函式友元遇到的一個報錯

C++中使用成員函式友元遇到的一個報錯

 1 class Grilfriend;
 2 class Building;
 3 
 4 class Building
 5 {
 6     //友元類,類中的成員可以訪問私有屬性
 7     //friend class Grilfriend;
 8     friend void Grilfriend::m_visit();
 9 
10 public:
11     string Sitting_Room;
12 private:
13     string Bed_Room;
14 
15     //告訴編譯器,My_Grilfriend函式是類的友元宣告,可以訪問私有成員
16     //
這裡定義在private下面是證明宣告不受許可權影響 17 friend void My_Grilfriend(Building &building); 18 19 public: 20 Building() 21 { 22 this->Sitting_Room = "客廳"; 23 this->Bed_Room = "臥室"; 24 } 25 26 ~Building() 27 { 28 29 } 30 31 }; 32 33 class Grilfriend 34 { 35 private
: 36 Building *building; 37 38 public: 39 void m_visit(); 40 Grilfriend(); 41 ~Grilfriend(); 42 };

在練習C++成員函式友元中,上方的程式碼出現報錯   invalid use of incomplete type 'class Grilfriend'     查來查去,發現原因:原來是Building類中不知道Grilfriend類中的m_visit()的具體寫法,不知道這個函式要訪問他的私有成員,所以才會報錯。

一種解決方法是,把下面的Grilfriend類寫到

Building類前面,改完後的程式碼為:

 1 class Grilfriend
 2 {
 3 private:
 4     Building *building;
 5 
 6 public:
 7     void m_visit();
 8     Grilfriend();
 9     ~Grilfriend();
10 };
11 
12 class Building
13 {
14     //友元類,類中的成員可以訪問私有屬性
15     //friend class Grilfriend;
16     friend void Grilfriend::m_visit();
17 
18 public:
19     string Sitting_Room;
20 private:
21     string Bed_Room;
22 
23     //告訴編譯器,My_Grilfriend函式是類的友元宣告,可以訪問私有成員
24     //這裡定義在private下面是證明宣告不受許可權影響
25     friend void My_Grilfriend(Building &building);
26 
27 public:
28     Building()
29     {
30         this->Sitting_Room = "客廳";
31         this->Bed_Room = "臥室";
32     }
33 
34     ~Building()
35     {
36 
37     }
38 
39 };

這樣就可以了,也不報錯了。