0

请在标记为重复之前阅读

我正在重载运算符 >> 和 << 以读取具有实部 r 和虚部 i 的复数;

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
class complex
{
    int r,i;
public:
complex()
{ i=r=0;}
friend istream& operator>>(istream&, complex&);
friend ostream& operator<<(ostream&,complex&);
};
istream& operator>>(ifstream &din, complex &x)
{
    din>>x.r;
    din>>x.i;
    return din;
}
ostream& operator<<(ostream &dout, complex &x)
{
dout<<x.r<<x.i;
return dout;
}
void main()
{
clrscr();
complex x;
cin>>x;
cout<<x;

}

错误是代码部分无法访问 r 和 i

din>>x.r; din>>x.i;

错误是 r 和 i 是私有的,因此无法访问正常的友元函数不能访问私有变量。为什么它只对 >> 失败?

注意: << 运算符工作正常。只有 >> 失败

4

1 回答 1

6

的朋友声明operator>>接受一个istream参数,但实现接受一个ifstream参数,使其成为一个完全不同的(因此非friend)函数。删除多余的f,它应该可以工作。

于 2013-07-10T15:10:51.853 回答