自学C++半个月的准大学生,跟着黑马程序员的课程学,在类函数作友元这一集时遇到了一个问题,下面代码主要思路是跟着视频敲的
#include <iostream>
#include <string>
using namespace std;
class Building
{
friend void GoodGay::visit(); //此处明明已经声明了visit函数作友元
public:
string m_sittingroom;
Building()
{
m_sittingroom = "客厅";
m_bedroom = "卧室";
}
private:
string m_bedroom;
};
class GoodGay
{
public:
GoodGay()
{
building = new Building;
}
Building* building;
void visit()
{
cout << building->m_sittingroom << endl;
cout << building->m_bedroom << endl; ** //此处m_bedroom 被编译器报错了,不知道是为什么?明明前面已经注明了visit函数作友元
**
}
};
int main()
{
GoodGay gg;
gg.visit();
}
【以下回答由 GPT 生成】
问题解决思路:
在代码中,我们需要在GoodGay
类中访问Building
类的m_bedroom
成员变量,但是编译器报错了。问题出在friend void GoodGay::visit();
这行代码上,我们需要正确的声明GoodGay
类和visit
函数。下面是解决该问题的具体步骤:
Building
类的声明,在类声明的最后加上class GoodGay;
,这样可以提前声明GoodGay
类。friend void GoodGay::visit();
这行代码放在GoodGay
类的前面,这样编译器可以正确识别GoodGay
类。GoodGay
类的定义放在Building
类的后面,这样在GoodGay
类的定义中,就可以访问到Building
类的私有成员变量了。修改后的代码如下:
#include <iostream>
#include <string>
using namespace std;
class Building
{
friend class GoodGay; //在类声明的最后加上class GoodGay; 以提前声明GoodGay类
public:
string m_sittingroom;
Building()
{
m_sittingroom = "客厅";
m_bedroom = "卧室";
}
private:
string m_bedroom;
};
class GoodGay
{
public:
GoodGay()
{
building = new Building;
}
Building* building;
void visit()
{
cout << building->m_sittingroom << endl;
cout << building->m_bedroom << endl;
}
};
int main()
{
GoodGay gg;
gg.visit();
}
这样,编译器就不会再报错了,你可以成功运行程序并输出结果了。希望能帮助到你!如果你还有其他问题,请随时提问。
【相关推荐】