繁体   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