高通骁龙625与808:c++程序 出错

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/10 08:55:11
第一个文件
#include"iostream.h"
class Complex1
{
private:
float real,imag;
public:
Complex1() {real=0.0;imag=0.0;}
Complex1(float r,float i) { real=r;imag=i;}
ostream & operator<<(ostream &output,const Complex1 &a);
istream & operator>>(istream &input,const Complex1 &a);
void print();
friend Complex1 operator+(Complex1 a,Complex1 b);
friend Complex1 operator-(Complex1 a,Complex1 b);
friend Complex1 operator*(Complex1 a,Complex1 b);
friend Complex1 operator/(Complex1 a,Complex1 b);
};
第二个
#include"Complex1.h"
#include"iostream.h"

void Complex1::print()
{
cout<<real;
if(imag>0) cout<<"+";
if(imag!=0) cout<<imag<<"i"<<endl;
else cout<<endl;
}

Complex1 operator+(Complex1 a,Complex1 b)
{
Complex1 temp;
temp.real=a.real+b.real;
temp.imag=a.imag+b.imag;
return temp;
}
Complex1 operator-(Complex1 a,Complex1 b)
{
Complex1 temp;
temp.real=a.real-b.real;
temp.imag=a.imag-b.imag;
return temp;
}
Complex1 operator*(Complex1 a,Complex1 b)
{
Complex1 temp;
temp.real=a.real*b.real-a.imag+b.imag;
temp.imag=a.real*b.imag+a.imag*b.real;
return temp;
}
Complex1 operator/(Complex1 a,Complex1 b)
{
Complex1 temp;
float ftemp;
ftemp=1/(b.real*b.real+b.imag*b.imag);
temp.real=(a.real*b.real)*ftemp;
temp.imag=(b.real*a.imag-b.imag*a.real)*ftemp;
return temp;
}
ostream &operator<<(ostream &output,const Complex1 &a)
{
output<<a.real;
if(a.imag>0)
output<<'+';
if(a.imag!=0)
output<<a.imag<<endl;
}
istream &operator>>(istream &input,const Complex1 &a)
{ input>>a.real>>a.imag;
}
第三个
#include"Complex1.h"
template<class T>
T Test(T x,T y,T z)
{
return (x+y*z);
}
void main()
{
Complex1 c1(1.5,2.5),c2(5,15),c3;
c1.print();
c2.print();
c3.print();
c3=c1+c2;
c3.print();
c3=c1-c2;
c3.print();
c3=c1*c2;
c3.print();
c3=c1/c2;
c3.print();
}
重载输入输出符,执行时出错
binary 'operator <<' has too many parameters
请高手指点

目前我发现的一个问题是重载的输入流
istream & operator>>(istream &input,const Complex1 &a);
中 Complex1 &a 不应该是 const,因为要修改的。

另外我认为应该将两个流重载都设置为friend,以保证其能在gcc中编译通过。

PS:您用什么编译器?