C++ 友元,一个类中的成员函数访问另一个类中的私有属性,请大佬解惑。
问题描述:
代码如下:
#include <iostream>
#include<string>
using namespace std;
class Building {
//friend void GoodGirl::visit();
private:
string badRoom;
public:
string sittingRoom;
Building() {
badRoom = "卧室";
sittingRoom = "客厅";
}
};
class GoodGirl {
public:
Building *b1;
GoodGirl() {
b1 = new Building();
}
void visit() {
cout << b1->sittingRoom << endl;
}
};
void test01() {
GoodGirl b1;
b1.visit();
}
int main() {
test01();
system("pause");
return 0;
}
这段代码可以正常运行,但是当我把注释//friend void GoodGirl::visit();去掉,把这一行加入代码以后,就报错了,
我本意是使GoodGirl中的visit()函数可以访问Building中的badRoom属性,这下还没开始访问呢,就加了个友元而已,就报错了,我实在是不知道是什么原因,我照着老师的代码敲的,为什么我自己运行不了,我用的是VS2017,和环境有关系吗?
答
#include <iostream>
#include<string>
using namespace std;
class Building;
class GoodGirl {
public:
Building *b1;
GoodGirl();
void visit();
};
class Building {
friend void GoodGirl::visit();
private:
string bedRoom;
public:
string sittingRoom;
Building() {
bedRoom = "卧室";
sittingRoom = "客厅";
}
};
GoodGirl::GoodGirl() {
b1 = new Building();
}
void GoodGirl::visit() {
cout << b1->bedRoom << endl;
cout << b1->sittingRoom << endl;
}
void test01() {
GoodGirl b1;
b1.visit();
}
int main() {
test01();
system("pause");
return 0;
}
// output:
卧室
客厅
需要把GoodGirl的类定义放在Building前,但GoodGirl的函数实现放在后面。由于GoodGirl有Building类型指针成员,所以要在更前面声明Building类。上面代码已经运行通过。
附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。赞助多少都可以。多谢。
答
你要在前面先申明类GoodGirl,不然Building类不认识
class GoodGirl;
答
也许对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html