Myo*_*tis 0 c++ operator-overloading
我有在Visual Studio 2010中无错误编译的代码.但是g ++会出错
CComplex.cpp: In member function 'Complex Complex::operator+(Complex&)':
CComplex.cpp:22: error: no matching function for call to 'Complex::Complex(Complex)'
CComplex.cpp:15: note: candidates are: Complex::Complex(Complex&)
make: *** [CComplex.o] Error 1
Run Code Online (Sandbox Code Playgroud)
请告诉我我的代码有什么问题.
Complex.h
class Complex
{
public:
Complex();
Complex(double _Re, double _Im);
Complex(Complex& c);
Complex operator+(Complex& num);
inline double& fRe(void){return Re;}
inline double& fIm(void){return Im;}
protected:
double Re;
double Im;
}
Run Code Online (Sandbox Code Playgroud)
Complex.cpp
Complex::Complex(){
Re = 0.0;
Im = 0.0;
}
Complex::Complex(double re, double im){
Re = re;
Im = im;
}
Complex::Complex(Complex& complex){
*this = complex;
}
Complex Complex::operator+(Complex& num){
return Complex(Re + num.fRe(), Im + num.fIm());
};
Run Code Online (Sandbox Code Playgroud)
Complex Complex::operator+(Complex& num){
return Complex(Re + num.fRe(), Im + num.fIm());
};
Run Code Online (Sandbox Code Playgroud)
作为回复,为临时对象调用复制c-tor,不能绑定到lvalue-reference.使用
Complex(const Complex& c);
Run Code Online (Sandbox Code Playgroud)
并且operator +
也用于
Complex operator + (const Complex& c)
要么
Complex operator + (Complex c)
对于第一个案例函数fRe
并且fIm
应该是常量函数,或者您应该对传递的对象进行显式复制.
它可以在MSVC中编译而不是用g ++编译,因为MSVC在执行返回值优化时错误地不检查是否存在可接受的复制构造函数.
归档时间: |
|
查看次数: |
117 次 |
最近记录: |