错误:将"const Complex"作为'....'丢弃限定符的"this"参数传递
error: passing ‘const Complex’ as ‘this’ argument of '....' discards qualifiers
我正试图用复数重载C++中的*运算符。我还在类文件(Complex.h)中声明了一个常量I。Complex.cpp是该类的实现。主文件用于测试。但是,它无法编译。如何修复?
error: passing ‘const Complex’ as ‘this’ argument of ‘Complex Complex::operator*(const Complex&)’ discards qualifiers [-fpermissive]
cout << "Actual:" << (I * I) << endl;
这是我的主文件:
#include <iostream>
#include "Complex.cpp" //remove it
#include "Complex.h"
using namespace std;
int main (){
// test multiplication
cout << "nExpected:I*I = -1" << endl;
cout << "Actual:" << (I * I) << endl;
return 0;
}
这是我的头文件:
#ifndef COMPLEX_H
#define COMPLEX_H
#include <cstdlib> //exit
#include <iostream>
class Complex{
public:
Complex(double a, double b);
Complex(double a);
double real() const{
return a;
}
double imag() const{
return b;
}
Complex operator*(const Complex& c2);
private:
double a;
double b;
};
//define a constant i
const Complex I(0,1);
#endif
这是实现文件:
#include "Complex.h"
#include <cmath>
using namespace std;
Complex::Complex(double realNum, double imagNum):a(realNum),b(imagNum){}
Complex::Complex(double realNum):a(realNum),b(0){}
Complex Complex::operator*(const Complex& c2){
double c = c2.real(), d = c2.imag();
return Complex((a*c-b*d),(b*c+a*d));
}
您的语句(I * I)
乘以两个const Complex
,因此您只能使用该类的const
方法。但是,您的operator*
仅在非常量版本中可用。
要更正,只需通过将其声明为const
Complex operator*(const Complex& c2) const;
在实现中也是如此。
编辑:更详细地说:你基本上有两种可能性来声明一个二进制运算符,要么在类外声明为
Complex operator*(Complex const& a, Complex const& b);
或通过在其内部
Complex operator*(Complex const& a) const;
您选择了课内版本。因此,当编译器看到(I*I)
,其中两者都是const
时,它将表达式转换为I.operator*(I)
。然而,为了做到这一点,operator*
也必须是const
,否则它不能从常数I
调用。这是因为编译器必须假设该方法将更改I
,这是不允许的。
相关文章:
- 错误:将 x 作为 x 的参数传递'this'丢弃限定符
- 错误:将“const sdf”作为“this”参数传递会丢弃限定符 [-fpermissive]
- 错误:将'xxx'作为'xxx'丢弃限定符的参数传递'this' [-允许]
- std::remove_if 将“const type”作为“this”参数传递会丢弃 Linux 上的限定符
- 将'const'作为参数传递'this'时出错
- (C++)将"this"作为默认参数传递给静态方法
- 将“const CMyclass”作为..的“this”参数传递.丢弃限定符 [-允许]
- 错误:将“const Cell”作为“void Cell::p rintcell()”的“this”参数传递丢弃限定符[
- 如果参数采用引用,在函数参数中传递 *this 会导致内存泄漏
- 错误:将'const …'作为'…'的参数传递'this'在调用方法中丢弃限定符
- 将“const”作为“const double”的“this”参数传递时出错,将丢弃限定符
- 错误:将"const Complex"作为'....'丢弃限定符的"this"参数传递
- 是否允许将 *this 作为接受引用(&)的函数的参数传递?
- 将全局常量作为"this"参数传递会丢弃限定符
- 错误:将'const Tarih'作为'void(int)' 'this'参数传递丢弃限定符|
- 错误:将"xxx"作为"this"参数传递会丢弃限定符
- 将"this"作为参数传递时从 const "No known conversion"
- C++错误:将 xxx 作为 xxx 的参数传递'this'丢弃限定符
- C++错误:将 const 作为参数传递'this'
- 修复错误:将'const foo'作为'const size_t foo::method()'的参数传递'this'