我正在使用 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
如何解决?
最佳答案
编译器基本上是在说您似乎正在使用一个只读对象的函数,该函数允许更改它。想象一下,如果您可以在一个只读 复杂对象上调用一个成员函数 say IncrementImaginary();
,您将改变一个>只读对象!
这就是为什么当您的成员函数不改变您类的变量(即状态)时,您应该附加一个const
像这样对他们进行限定:
double real() const{
return a;
}
这样,编译器就会知道在您的类的只读对象上运行此函数是安全的。
关于c++ - 重载 == 运算符导致丢弃限定符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435843/