在学习c++过程中发现对类中函数添加友元属性而让函数调用其私有属性时,一直报错。
原代码如下:
class Goodgay
{
public:Goodgay();
public:
Building* building;
void visit();
void visit2();
};
class Building
{
friend void Goodgay::visit();
public:string sittingroom;
Building();
private:string bedroom;
};
Building::Building()
{
this->bedroom = "卧室";
this->sittingroom = "客厅";
}
Goodgay::Goodgay()
{
building = new Building;
}
void Goodgay::visit()
{
cout << "你的好基友正在访问" << building->sittingroom << endl;
cout << "你的好基友正在访问" << building->bedroom<< endl;
}
void Goodgay::visit2()
{
cout << "你的好基友正在访问" << building->sittingroom << endl;
//cout << "你的好基友正在访问" << building->bedroom << endl;
}
void test()
{
Goodgay gay;
gay.visit();
gay.visit();
}
int main()
{
test();
system("pause");
return 0;
}
报错也千奇百怪;
看到很多人说需要将Building放到Goodgay前面;尝试后也报错
后来发现只需要将类声明,就可以解决该问题既能解决类的定义问题,也能解决友元属性定义问题,但类building还是在类Goodgay后面才行;原代码如下
class Goodgay;
class Building;
class Goodgay
{
public:Goodgay();
public:
Building* building;
void visit();
void visit2();
};
class Building
{
friend void Goodgay::visit();
public:string sittingroom;
Building();
private:string bedroom;
};
Building::Building()
{
this->bedroom = "卧室";
this->sittingroom = "客厅";
}
Goodgay::Goodgay()
{
building = new Building;
}
void Goodgay::visit()
{
cout << "你的好基友正在访问" << building->sittingroom << endl;
cout << "你的好基友正在访问" << building->bedroom<< endl;
}
void Goodgay::visit2()
{
cout << "你的好基友正在访问" << building->sittingroom << endl;
//cout << "你的好基友正在访问" << building->bedroom << endl;
}
void test()
{
Goodgay gay;
gay.visit();
gay.visit();
}
int main()
{
test();
system("pause");
return 0;
}