#include<iostream>
#include<string>
using namespace std;
class Building;
class GoodFriend
{
public:
GoodFriend()
{
building = new Building;//在堆区创建一个对象,并且用指针building维护
};
void visit();
void visit2();
Building* building;
};
class Building
{
friend void GoodFriend::visit();
public:
Building();
string m_SittingRoom;//客厅
private:
string m_BedRoom;//卧室
};
Building::Building()//赋初值
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
void GoodFriend::visit()
{
cout << "visit 函数正在访问:" << building->m_SittingRoom << endl;
cout << "visit 函数正在访问:" << building->m_BedRoom << endl;
}
void GoodFriend::visit2()
{
cout << "visit2 函数正在访问:" << building->m_SittingRoom << endl;
//cout << "visit2 函数正在访问:" << building->m_BedRoom << endl;
cout << "visit2 函数无法访问卧室" << endl;
}
void test01()
{
GoodFriend g1;
g1.visit();
g1.visit2();
}
int main()
{
test01();
system("pause");
return 0;
}
出现友元声明无效的问题,报错:使用了未定义类型“Building”
问题原因:类的前向引用只能提前引入类名,不能涉及到类的细节。