友元函数访问类的私有数据

来源:百度知道 编辑:UC知道 时间:2024/05/25 19:51:18
class y;
class z;

class x{

public:
x(int ii){i=ii;}
friend void y::g();
friend class z;
friend void h(x &a);
private:
int i;
};
class y{
public:
void g();
private:
x a;
};

void y::g(){a.i++; }

class z{

public:
void f();
private:
x a;
};

void z::f(){a.i+=5;}

void h(x &a)
{a.i+=10;}

F:\youna\c++\周一作业\homework1\11.cpp(9) : error C2027: use of undefined type 'y'
F:\youna\c++\周一作业\homework1\11.cpp(2) : see declaration of 'y'
F:\youna\c++\周一作业\homework1\11.cpp(22) : error C2248: 'i' : cannot access private member declared in class 'x'
F:\youna\c++\周一作业\homework1\11.cpp(13) : see declaration of 'i'

你的class x有问题
申明友元时friend void y::g(); 需要class y的定义(在定义class x时,编译器还不知道函数void g()是class y的成员函数,因为此时还只有class y的申明,没有class y的定义)
建议改为friend class y;
其他的改法都很麻烦需要把某些对象改为对象的指针,在构造时new出对象来