我正在使用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
如何解决?
答案 0 :(得分:0)
编译器基本上说你似乎正在使用只读对象的功能,允许改变它。想象一下,如果你可以在只读复杂对象上调用成员函数IncrementImaginary();
,那么你改变 只读对象!
这就是为什么当您的成员函数不改变您的类的变量(即状态)时,您应该为它们附加const
限定符像这样:
double real() const{
return a;
}
这样,编译器就会知道在类的只读对象上运行此函数是安全的。