C++中使用成員函式友元遇到的一個報錯
阿新 • • 發佈:2022-05-21
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 };
這樣就可以了,也不報錯了。