返回信息流#include <iostream>
using namespace std;
class B;
class A
{
private:
int i;
int j;
public:
A():i(0),j(1){}
void set(int a,int b){i=a;j=b;}
void out(){cout<<"i="<<i<<" j="<<j<<endl;}
friend void B::set(int c,int b);
};
class B
{
public:
B(){};
void set(int c,int b);
void out();
private:
A a;
};
void B::set(int c,int b)
{
a.i=c;a.j=b;
}
void B::out()
{
a.out();
}
int main()
{
B b;
b.out();
b.set(3,2);
b.out();
}
为什么编译不了,哪里的错误呢?如果把B的定义放前面也不行啊!求教!
这是一条镜像帖。来源:北邮人论坛 / cpp / #36193同步于 2010/3/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助,关于友元函数的问题!
gbsh
2010/3/1镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
修改一下:
#include <iostream>
using namespace std;
//可以放到b.h中
class A;
class B
{
public:
B(A* pa):a(pa){};
void set(int c,int b);
void out();
private:
A* a;
};
//可以放到a.h中,加上#include "b.h"
class A
{
private:
int i;
int j;
public:
A():i(0),j(1){}
void set(int a,int b){i=a;j=b;}
void out(){cout<<"i="<<i<<" j="<<j<<endl;}
friend void B::set(int c,int b);
};
//可以放到b.cpp中,加上#include "a.h"
void B::set(int c,int b)
{
a->i=c;a->j=b;
}
void B::out()
{
a->out();
}
int main()
{
A a;
B b(&a);
b.out();
b.set(3,2);
b.out();
return 0;
}
另外还有一个方法就是将B整个类声明为A的友元,也能避免一些麻烦。
【 在 gbsh 的大作中提到: 】
: #include <iostream>
: using namespace std;
: class B;
: ...................