我想在两个类里分别声明彼此的友元函数 ,这样做为什么不行
#include <iostream>
#include <cstdlib>
using namespace std;
class a;
class b;
class a{
int n;
public:
void changeb(b*,int);
friend void b::change(a*,int);
};
class b{
int n;
public:
void b::change(a*,int);
friend void a::changeb(b*,int);
};
void b::change(a* h,int s){
h-> n=s;
}
void a::changeb(b* h,int s){
h-> n=s;
}
int main(){
a x;
b y;
x.changeb(&y,100);
y.change(&x,100);
return 0;
}
[解决办法]
在a内b还只是个空框架..哪来的函数.
所以不行.
[解决办法]
规定:声明一个类的成员函数为友元时,必须此类已经完整定义。
你要么别用友元,要么把整个类作为友元。
单个成员函数作为友元,本来就没有太大意义。
[解决办法]
还可以根据类的相互关系来考虑是否采用嵌套类的形式来实现
或者干脆用类指针
[解决办法]
友员是一种授权。A声明B是自己的友员意思是,B可以访问A,而不是A可以访问B。
如果要想让A类可以访问B了类,一定要在B类中将A类声明为自己的友员才行!
[解决办法]
建议你修改一下两个类的职责,如果有需求互相声明友元,证明关系比较混乱.一般是一个友元都最好不要用的.