关于“ ‘xxx’: 不是类或命名空间名称” 问题的解决过程
2022年11月20日,我在学习C++中的友元技术时遇到了一个问题,大概是这样子的:
#include<iostream>
#include<string>
using namespace std;
class Building
{
friend void GoodGay::visit01();
public:
Building();
public:
string sittingRoom;
private:
string bedRoom;
};
Building::Building() // 类外实现类内函数
{
sittingRoom = "客厅";
bedRoom = "卧室";
}
class GoodGay
{
public:
GoodGay();
void visit01(); // 目的:使得该成员函数能够访问Building中的私有内容
void visit02(); // 目的:该成员函数无法访问Building中的私有内容
public:
Building* building;
};
GoodGay::GoodGay()
{
building = new Building;
}
void GoodGay::visit01()
{
cout << "GoodGay类成员函数visit01正在访问Building类对象building的:" << building->sittingRoom << endl;
//cout << "GoodGay类成员函数visit01正在访问Building类对象building的:" << building->bedRoom << endl;
}
void GoodGay::visit02()
{
cout << "GoodGay类成员函数visit02正在访问Building类对象building的:" << building->sittingRoom << endl;
// 报错,无法访问Building类对象building的私有属性bedRoom
//cout << "GoodGay类成员函数visit02正在访问Building类对象building的:" << building->bedRoom << endl;
}
int main()
{
GoodGay gg;
gg.visit01();
gg.visit02();
system("pause");
}
以上代码报错如下:

猜测:应该是Building类中的这句语句不认识GoodGay这个类
friend void GoodGay::visit01();
尝试:在Building类前先声明一下试试,即在Building类前加上
class GoodGay;
整体代码如下:
#include<iostream>
#include<string>
using namespace std;
class GoodGay; // "提前声明"
class Building
{
friend void GoodGay::visit01();
public:
Building();
public:
string sittingRoom;
private:
string bedRoom;
};
Building::Building() // 类外实现类内函数
{
sittingRoom = "客厅";
bedRoom = "卧室";
}
class GoodGay
{
public:
GoodGay();
void visi

本文记录了在C++编程中解决友元类访问问题的过程。通过调整类声明与定义的位置,解决了因编译器视类为不完全类型而导致的问题,并成功实现了友元类对私有成员的访问。
最低0.47元/天 解锁文章
713





