在自定义类Complex中定义了类型转换构造函数,同时,定义了以Complex类对象的引用为形参的运算符+重载的友元函数,在执行类型隐式转换时出错。
错误代码如下:
#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); //运算符重载的友元函数
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+2.5;
c3.display();
return 0;
}
其实是类型对应发生了错误。
修改方法一:只需把
friend Complex operator+(Complex &c1,Complex &c2); //运算符重载的友元函数
这两句代码中的引用符号“&”删去即可。
修改方法二:
显式调用转换函数:
c3=c1+Complex(2.5);
参考:http://bbs.bccn.net/thread-350819-1-1.html