编程语言
首页 > 编程语言> > 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 };

这样就可以了,也不报错了。

 

 

标签:友元,Building,Room,void,C++,public,报错,Grilfriend,class
来源: https://www.cnblogs.com/songmingze/p/16295522.html