[英]Error while overloading operators
當我嘗試重載運算符“!”時,出現以下錯誤。
complex_nums.cpp: In function ‘complex operator!(const complex&)’:
complex_nums.cpp:50:23: error: passing ‘const complex’ as ‘this’ argument discards qualifiers [-fpermissive]
return complex(c.re(),-c.im());
^
complex_nums.cpp:14:9: note: in call to ‘double complex::re()’
double re(){
^
complex_nums.cpp:50:31: error: passing ‘const complex’ as ‘this’ argument discards qualifiers [-fpermissive]
return complex(c.re(),-c.im());
^
complex_nums.cpp:17:9: note: in call to ‘double complex::im()’
double im(){
^
代碼是:
#include<iostream>
class complex{
private:
double real; //real part of complex
double imag; // imaginary part of complex
public:
complex(double r=0., double i=0.):real(r),imag(i){
}; // constructor with initialization
complex(const complex&c):real(c.real),imag(c.imag){
}; // copy constructor with initialization
~complex(){
}; // destructor
double re(){
return real;
}; // read real part
double im(){
return imag;
}; // read imaginary part
const complex& operator=(const complex&c){
real=c.real;
imag=c.imag;
return *this;
}; //assignment operator
const complex& operator+=(const complex&c){
real += c.real;
imag += c.imag;
return *this;
}; // addition of current complex
const complex& operator-=(const complex&c){
real -= c.real;
imag -= c.imag;
return *this;
}; // subtract from current complex
const complex& operator*=(const complex&c){
double keepreal = real;
real = real*c.real-imag*c.imag;
imag = keepreal*c.imag+imag*c.real;
return *this;
}; // multiply current complex with a complex
const complex& operator/=(double d){
real /= d;
imag /= d;
return *this;
}; // divide current complex with real
void print(){
std::cout<<"Real: "<<re()<<" Imaginary: "<<im()<<"\n";
};
friend complex operator !(const complex& c){
return complex(c.re(),-c.im());
};
};
int main(){
complex C(1.,1.);
complex P(3.,2.);
C.print();
P.print();
P+=C;
P.print();
P=!C;
P.print();
return 0;
}
這是線索...
錯誤:將“ const complex”作為“ this”參數傳遞會舍棄限定詞
問題在於im()
和re()
不是const方法。
使用限定符const
聲明這些功能
double re() const {
return real;
}; // read real part
double im() const {
return imag;
}; // read imaginary part
因為至少在運算符中
friend complex operator !(const complex& c){
return complex(c.re(),-c.im());
};
它們被稱為常量對象。
這是規則,當您創建const function時,傳遞給該const函數的函數也必須為const。re()和im()必須為const
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.