weixin_53650092 2021-05-06 13:07 采纳率: 72.7%
浏览 134
已采纳

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,和环境有关系吗?

  • 写回答

4条回答 默认 最新

  • benbenli 2021-05-06 13:26
    关注
    #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币。赞助多少都可以。多谢。

     

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效