簡體   English   中英

重載運算符時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM