C++编译出现fatal error C1001: INTERNAL COMPILER ERROR怎么办??

//定义一个复数类Complex,重载运算符"+" ,使之能够用于复数的加法运算。
//参与运算的两个操作数可以都是类对象,也可以其中有一个是整数,顺序任意。
//例如,c1+c2、c1+i、i+c1均合法(设i是整数,c1, c2为复数)。
//编写程序,分别求两个复数之和、整数和复数之和;
//重载流插入运算符和流提取运算符使它们能够输入输出复数对象。
#include <iostream>
using namespace std;
class Complex{
public:
Complex(){
real=0;
imag=0;}
Complex(double a,double i){ //等会试试另一种
real=a;
imag=i;}
Complex(double a){ //转换构造函数
real=a;
imag=0;}
operator double(){ //类型转换运算符函数
return real;}
friend istream & operator >>(istream &,Complex);
friend ostream & operator <<(ostream &,Complex);
friend Complex operator+(Complex &,Complex &); //运算符重载函数
private:
double real;
double imag;
};
ostream & operator <<(ostream &out,Complex &c){
if(c.imag<0)
cout<<c.real<<c.imag<<"i"<<endl;
else
cout<<c.real<<"+"<<c.imag<<"i"<<endl;
}
istream & operator >>(istream &in,Complex &c){
cin>>c.real>>c.imag;
}
Complex operator+(Complex &c1,Complex &c2){
return Complex (c1.real+c2.real,c1.imag+c2.imag);
}
int main(){
Complex c1(3,4),c2;
double d;
return 0;
}

main还没写完。。通不过编译咋办????????

#include <iostream>
using namespace std;
class Complex{
public:
Complex(){
real = 0;
imag = 0;
}
Complex(double a, double i){     //等会试试另一种
real = a;
imag = i;
}
Complex(double a){    //转换构造函数
real = a;
imag = 0;
}
operator double(){   //类型转换运算符函数
return real;
}
friend istream & operator >>(istream &,  Complex&);
friend ostream & operator <<(ostream &,const Complex&);
friend Complex operator+(Complex &, Complex &);     //运算符重载函数
friend Complex operator+(Complex &,double);     //运算符重载函数
friend Complex operator+(double, Complex &);     //运算符重载函数
private:
double real;
double imag;
};
ostream & operator <<(ostream &out,const  Complex& c){
if (c.imag<0)
cout << c.real << c.imag << "i" << endl;
else
cout << c.real << "+" << c.imag << "i" << endl;
return out;
}
istream & operator >>(istream &in, Complex& c){
in >> c.real >> c.imag;
return in;
}
Complex operator+(Complex &c1, Complex &c2){
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
Complex operator+(Complex &c1, double i){
Complex c2(i);
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
Complex operator+( double i,Complex &c1){
Complex c2(i);
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
int main(){
Complex c1(3, -4), c2;
cin >> c2;
double d=c1;
c2 = d;
c1 = c1 + c2;
cout << c1;
c1 = c1 + d;
cout << c1;
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-05
试一下,修改#< include>为 #<include.h >删掉using namespace std;血的教训,调了一节课,后来还是老师说的,是VC的问题,所以说换编译器的也对的,我用Dev就没这问题TAT
第2个回答  推荐于2017-09-09
#include <iostream>
using namespace std;
class Complex{
public:
Complex(){
real=0;
imag=0;}
Complex(double a,double i){ 
real=a;
imag=i;}
Complex(double a){ 
real=a;
imag=0;}
operator double(){
return real;}
friend istream & operator >>(istream &,Complex &); //<---这里声明要与实现参数类型一致才可以!加&引用
friend ostream & operator <<(ostream &,Complex&); //<---同上
friend Complex operator+(Complex &,Complex &); 
private:
double real;
double imag;
};

追问

还是不行。。

追答

我前面问题回答中说了,你不能用vc6,  如果是vc6定义友元函数,且要访问私有变量,必须将友元函数的定义写到类定义中,如:

#include <iostream>
using namespace std;
class Complex{
public:
    Complex(){
        real=0;
        imag=0;}
    Complex(double a,double i){ 
        real=a;
        imag=i;}
    Complex(double a){ 
        real=a;
        imag=0;}
    operator double(){
        return real;}
    friend istream & operator >>(istream &in,Complex &c)
    {
in>>c.real>>c.imag;//这里要用形参
return in;//注意加返回值
    }
    friend ostream & operator <<(ostream &out,Complex& c)
    {
if(c.imag<0)
out<<c.real<<c.imag<<"i"<<endl;//这里要用形参
else
out<<c.real<<"+"<<c.imag<<"i"<<endl;//这里要用形参
return out; //注意加返回值
    }
    friend Complex operator+(Complex &c1,Complex &c2)
    {
return Complex (c1.real+c2.real,c1.imag+c2.imag);
    } 
private:
    double real;
    double imag;
};

追问

还是那个错误。。

追答

你是复制粘贴的我的代码吗?我在vc6上测试过的啊!!

追问

...是复制粘贴的。。

我后面加了

int main(){

return 0;

}

不过不加还是那个错误。。。。。。。哭

追答

你把你的完整代码粘出来,尤其是第59行那里,你加了那几行main(){} 怎么会有59行代码?

追问

私信吧。。字数超过了。。

追答

不客气,一同学习了

本回答被提问者和网友采纳
第3个回答  2014-12-15
把私有成员修改为公有就可以通过(dev C++ 编译)。
//private://注释掉即可
相似回答