重载==运算符导致丢弃限定符错误

时间:2014-10-18 02:52:14

标签: c++ polymorphism operator-overloading

我正在使用C ++创建一个复杂的数字类。我想重载==运算符。 但我得到了这个错误:

In file included from Complex.cpp:1:0,
             from testComplex.cpp:2:
Complex.h: In function ‘bool operator==(const Complex&, const Complex&)’:
Complex.h:29:21: error: passing ‘const Complex’ as ‘this’ argument of ‘double Complex::real()’ discards qualifiers [-fpermissive]
     return (c1.real() == c2.real() && c1.imag() == c2.imag());

这是我的班级文件:

#ifndef COMPLEX_H
#define COMPLEX_H

class Complex{
    public:
    Complex(void);
    Complex(double a, double b);
    Complex(double a);
    double real(){ 
        return a;
    }

    double imag(){
        return b;
    }
    private:
    double a;
    double b;
};

bool operator==(const Complex& c1, const Complex& c2){
    return (c1.real() == c2.real() && c1.imag() == c2.imag());
}
#endif

如何解决?

1 个答案:

答案 0 :(得分:0)

编译器基本上说你似乎正在使用只读对象的功能,允许改变它。想象一下,如果你可以在只读复杂对象上调用成员函数IncrementImaginary();,那么你改变 只读对象!

这就是为什么当您的成员函数不改变您的类的变量(即状态)时,您应该为它们附加const限定符像这样:

double real() const{
  return a;
}

这样,编译器就会知道在类的只读对象上运行此函数是安全的。