【发布时间】:2014-10-21 15:11:24
【问题描述】:
我试图重载 C++ 中的 * 运算符,就复数而言。我还声明了一个常量 I,它位于类文件 (Complex.h) 中。 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));
}
【问题讨论】:
标签: c++ compiler-errors operator-overloading overloading operator-keyword