一个关于重载流插入运算符的有关问题
一个关于重载流插入运算符的问题
#include<iostream>
using namespace std;
class Complex
{public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator+(Complex &c2);
friend ostream operator <<(ostream &,Complex&);
private:
double imag;
double real;
};
Complex Complex::operator+(Complex&c2)
{return Complex(real+c2.real,imag+c2.imag);}
ostream operator <<(ostream &output,Complex &c)
{ output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return output;
}
int main()
{
Complex c1(2,4),c2(6,10),c3;
c3=c1+c2;
cout<<c3;
return 0;
}
1> 源.cpp
1>f:\vs2012_ult_chs\vc\vcprojects\consoleapplication6\consoleapplication6\源.cpp(17): error C2248: “std::basic_ostream<_Elem,_Traits>::basic_ostream”: 无法访问 private 成员(在“std::basic_ostream<_Elem,_Traits>”类中声明)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> f:\vs2012_ult_chs\vc\include\ostream(82) : 参见“std::basic_ostream<_Elem,_Traits>::basic_ostream”的声明
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
要怎么修改才可以运行成功?
------解决方案--------------------
这个好像是VC6.0有的bug,试试这样行不行
#include<iostream>
using namespace std;
class Complex
{public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator+(Complex &c2);
friend ostream operator <<(ostream &,Complex&);
private:
double imag;
double real;
};
Complex Complex::operator+(Complex&c2)
{return Complex(real+c2.real,imag+c2.imag);}
ostream operator <<(ostream &output,Complex &c)
{ output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return output;
}
int main()
{
Complex c1(2,4),c2(6,10),c3;
c3=c1+c2;
cout<<c3;
return 0;
}
1> 源.cpp
1>f:\vs2012_ult_chs\vc\vcprojects\consoleapplication6\consoleapplication6\源.cpp(17): error C2248: “std::basic_ostream<_Elem,_Traits>::basic_ostream”: 无法访问 private 成员(在“std::basic_ostream<_Elem,_Traits>”类中声明)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> f:\vs2012_ult_chs\vc\include\ostream(82) : 参见“std::basic_ostream<_Elem,_Traits>::basic_ostream”的声明
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
要怎么修改才可以运行成功?
Visual Studio 2012
------解决方案--------------------
这个好像是VC6.0有的bug,试试这样行不行
#include<iostream>
using namespace std;
class Complex;//声明类,因为下面函数声明要用
ostream& operator<<(ostream &cout,Complex &c);//声明函数,加上这句对函数进行声明
class Complex
{
public:
Complex()
{
real=0;imag=0;
}
Complex(double r,double i)
{
real=r;imag=i;
}
public:
friend ostream& operator<<(ostream &cout,Complex &c);
private:
double imag;
double real;
};
ostream& operator <<(ostream &cout,Complex &c)
{
cout<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return cout;
}
int main()
{
Complex c1(2,4),c2(6,10),c3;
cout<<c1;
return 0;
}