读书人

运算符重载的有关问题

发布时间: 2012-02-16 21:30:36 作者: rapoo

运算符重载的问题
开发环境为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都不错

读书人网 >C++

热点推荐