I have code which compiles without error in Visual Studio 2010.
But g++ puts error
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
Please tell me what’s the problem with my code.
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;
}
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());
};
In return calls copy c-tor for temporary-object, that cannot be binded to lvalue-reference. Use
And for
operator +use alsoComplex operator + (const Complex& c)or
Complex operator + (Complex c)For first case functions
fReandfImshall be constant functions, or you should do explicit copy of passed object.It can be compiled in MSVC and not compiled in g++, because MSVC wrongly does not check for an existence of acceptable copy constructor when performing Return Value Optimization.