运算符重载的问题
开发环境为VC++6.0。
我定了如下一段代码,但编译不能通?
#include<iostream>
using namespace std;
class complex
{
public:
complex(double r=0.0,double i=0.0);
friend complex operator + (complex c1,complex c2);
friend complex operator - (complex c1,complex c2);
void display();
private:
double real;
double imag;
};
complex::complex(double r=0.0,double i=0.0)
{
real=r;
imag=i;
}
void complex::display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
complex operator + (complex c1,complex c2)
{
return complex(c1.real+c2.real,c1.imag+c2.imag);
}
complex operator - (complex c1,complex c2)
{
return complex(c1.real-c2.real,c1.imag-c2.imag);
}
int main()
{
complex c1(5,4),c2(2,10),c3;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
c3=c1-c2;
cout<<"c3=c1-c2 =";
c3.display();
c3=c1+c2;
cout<<"c3=c1+c2 =";
c3.display();
return 0;
}
好像是内部错误:
:\MyProject\complex\complex.cpp(8) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
执行 cl.exe 时出错.
complex.exe - 1 error(s), 0 warning(s)
我打过补丁sp6的,仍没用。我装的方法是直接将补丁装在VC98和VC++6.0中(两个文件夹中都装了一下),是不是有问题啊?请问如何打这个补丁,谢谢!
[解决办法]
- C/C++ code
#include <iostream> using namespace std; class complex { public: complex(double r=0.0,double i=0.0); // 声明的时候指定了默认值 friend complex operator + (complex c1,complex c2); friend complex operator - (complex c1,complex c2); void display(); private: double real; double imag; }; complex::complex(double r,double i) // 定义的时候不能指定默认值{ real=r; imag=i; } void complex::display() { cout <<"(" <<real <<"," <<imag <<")" <<endl; } complex operator + (complex c1,complex c2) { return complex(c1.real+c2.real,c1.imag+c2.imag); } complex operator - (complex c1,complex c2) { return complex(c1.real-c2.real,c1.imag-c2.imag); } int main() { complex c1(5,4),c2(2,10),c3; cout <<"c1="; c1.display(); cout <<"c2="; c2.display(); c3=c1-c2; cout <<"c3=c1-c2 ="; c3.display(); c3=c1+c2; cout <<"c3=c1+c2 ="; c3.display(); return 0; }
[解决办法]
#inclede<iostream>
using namespace std;
改为:#include<iostream.h>
//using namespace std;
就可以了
原因不详,不知道是什么原理
[解决办法]
不是程序的问题...
这是由于VC++(6.0)编译系统不完善,不完全符合标准,或者内部标志符和标准有冲突.
就这个题而言,你可以把#include <iostream>改为#include <iostream.h>并去掉using namespace std;
另外,这个程序如果在VC++6.0以上的版本(如VC2005)下编译的话应该是没问题的;
[解决办法]
所以说,楼主可以考虑换编译器了...
DevCpp和VC2005都不错