注册 登录
编程论坛 C++教室

请问这程序为什么编译会出错,怎么样修改

biancku 发布于 2011-02-20 11:13, 477 次点击
文件1.h
#include<iostream>
using namespace std;
class complex
{
public:
    complex() {real=0; imag=0;}
    complex(double r)
    {
        real=r;
        imag=0;
    }
    complex(double r,double i):real(r),imag(i){}
    friend complex operator + (complex &c1,complex &c2);
    operator double ()  {  return real; }
    void display() const;
private:
    double real;
    double imag;
};
complex operator+(complex &c1,complex &c2)
{
    return complex( c1.real+c2.real,c1.imag+c2.imag);
}
void  complex::display() const
{
    cout<<"("<<real<<","<<imag<<"i)"<<endl<<endl;
}
文件2.cpp
#include"1.h"
int main()
{
    complex c1(5,3),c2(5,4),c;
    double d;
    c1.display();
    c2.display();

    cout<<"c=c1+c2 = ";
    c=c1+c2;
    c.display();

    cout<<"2.5+c1 = ";
    c=2.5+c1;
    c.display();*/

    cout<<"c1+2.5 = ";
    c=c1+2.5;
    c.display();

    cout<<"complex c=2.5+2.5 = ";
    c=2.5+2.5;
    c.display();

    cout<<"double d=2.5+c1 = ";
    d=2.5+c1;
    cout<<d<<endl<<endl;*/
    return 0;
}
编译时的错误显示:
Compiling...
2.cpp
e:\程序a\1232\1.h(13) : 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 时出错.

2.obj - 1 error(s), 0 warning(s)
4 回复
#2
m21wo2011-02-20 17:12
   cout<<d<<endl<<endl;*/
c.display();*/

#3
2011-02-20 22:05
friend complex operator + (complex &c1,complex &c2);


我对这句代码很迷惑   你这声明了友元函数    完全没必要啊  写成成员函数就行

还一个参数更省事


关于你的错误,说实话。我不上编译器是看不出来拉
#4
dwyhewy2011-02-22 11:06
用了std名字空间,不没有必要再写“endl”
#5
homelove2011-02-22 16:36
是vc6的问题,我再vs2008下编译通过。
vc6下解决办法1,添加红色两行就ok了
程序代码:
#include<iostream>
using namespace std;
class   complex;
complex operator + (complex &c1,complex &c2);
class complex
{

public:
    complex() {real=0; imag=0;}
    complex(double r)
    {
        real=r;
        imag=0;
    }
    complex(double r,double i):real(r),imag(i){}
    friend complex operator+ (complex &c1,complex &c2);
    operator double ()  {  return real; }
    void display() const;
private:
    double real;
    double imag;
};

complex operator+(complex &c1,complex &c2)
{
    return complex( c1.real+c2.real,c1.imag+c2.imag);
}
void  complex::display() const
{
    cout<<"("<<real<<","<<imag<<"i)"<<endl<<endl;
}

 
1