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

关于运算符重载函数做为友元函数

suizier 发布于 2007-03-31 20:24, 531 次点击

请问这段代码哪里有错啊,我参考了几本书都是这样写的,可是VC6.0怎么通不过呢?


#include <iostream>
using namespace std;

class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}

friend Complex operator + (Complex &c1,Complex &c2);
void display();
private:
double real;
double imag;
};

Complex operator + (Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real,c1.imag+c2.imag);}

void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;
}

int main()
{
Complex c1(3,4),c2(5,-10),c3;
c3=c1+c2;

cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c1+c2=";c3.display();
return 0;
}

报错:

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
Error executing cl.exe.

1.obj - 1 error(s), 0 warning(s)

3 回复
#2
dlcdavid2007-03-31 20:31

同意楼下的,,
+还是用非成员

[此贴子已经被作者于2007-3-31 20:45:40编辑过]

#3
游乐园2007-03-31 20:42

程序没有错,加上声明就可以了


程序代码:

#include <iostream>
using namespace std;


class Complex;
Complex operator + (Complex &,Complex &);  
//加上声明 ,你的VC++没有打补丁sp6 所以没有提前声明友元是不通过的


class Complex
{
public:
    Complex(){real=0;imag=0;}
    Complex(double r,double i){real=r;imag=i;}


    friend Complex operator + (Complex &c1,Complex &c2);
    void display();
private:
    double real;
    double imag;
};


Complex operator + (Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real,c1.imag+c2.imag);}


void Complex::display()
{cout<<\"(\"<<real<<\",\"<<imag<<\"i)\"<<endl;
}


int main()
{
    Complex c1(3,4),c2(5,-10),c3;
    c3=c1+c2;


    cout<<\"c1=\";c1.display();
    cout<<\"c2=\";c2.display();
    cout<<\"c1+c2=\";c3.display();
    return 0;
}

#4
suizier2007-03-31 22:28
谢谢楼上的回答!
1