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 };
这样就可以了,也不报错了。
标签:友元,Building,Room,void,C++,public,报错,Grilfriend,class 来源: https://www.cnblogs.com/songmingze/p/16295522.html