c++类成员函数做友元问题

本人在写类成员函数做友元时遇到了 使用未定义类名的情况,不论如何调节Building类和GoodGay类的位置都说使用未定义类,事先声明了GoodGay类也没用,错误如下:
在这里插入图片描述
错误源码如下:

# include <iostream>
# include <string>
using namespace std;

class GoodGay;    //声明Goodgay类
class Building
{
	friend void GoodGay::visit();  //未给出定义便使用GoodGay导致编译器报错
public:
	Building()
	{
		settingroom = "客厅";
		bedroom = "卧室";
	}
public:
	string settingroom;
private:
	string bedroom;
};

//此刻Building给出了完整定义,但GoodyGay还未给出定义
class GoodGay
{
public:
	Building* building;
	GoodGay()
	{
		building = new Building;  //Building类实列化
	}
	void visit()
	{
		cout << "访问:" << building->settingroom << endl;
		cout << "访问:" << building->bedroom << endl;
	}
};
//此刻Goody才完整给出定义
int main()
{
	GoodGay gg;
	gg.visit();
	return 0;
}

经过一段时间的摸索,并结合**C++:成员友元函数(成员函数友元化)**我终于找到了错误原因。
在Building类中使用GoodGay的Vist方法时,因GoodGay类未给出完整定义,使得在编译过程时编译器会报错。

😊解决步骤如下:
1. 声明类友元函数所在类B;
2. 定义不是类友元函数所在类A,但不要实现函数,只定义即可;
3. 定义类友元函数所在类B,可实现方法;
4. 实现不是类友元函数所在类A的方法,具体实现方式未:数据类型 类::函数(参数)

正确源码如下:

# include <iostream>
# include <string> 
using namespace std;  
class Building; //声明类友元函数所在类
class GoodGay   //定义不是类友元函数所在类
{
public:
	Building* building;
	GoodGay();
	void visit();
};

class Building    //定义类友元函数所在类
{
	
public:
	friend void GoodGay::visit();  //类友元函数所在位置
	Building()
	{
		settingroom = "客厅";
		bedroom = "卧室";
	}
public:
	string settingroom;
private:
	string bedroom;
};

//实现不是类友元函数所在类的方法
GoodGay::GoodGay() {
	this->building = new Building();
}
void GoodGay::visit() {  
	cout << building->settingroom << endl;
	cout << building->bedroom << endl;
}
int main()
{
	GoodGay gg;
	gg.visit();
	system("pause");
	return 0;
}

结果如下:
在这里插入图片描述

友元使用很奇妙,希望各位看官能指出不足之处,在此谢过大家!!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值