c++ - 错误 'operator*' 不匹配

标签 c++ operator-overloading operator-precedence

我有一个进行小数计算的类。我让所有数学运算符都重载了。它对于相当简单的计算非常有用,但当我需要添加括号时会失败。例如,下面的计算都工作并得到正确的结果:

myClass r, a = 100000, b = 2.5, c = 10, d = 30;
r = c / d * a * b;
r = (c / d) * a * b;

但是如果我将计算更改为 r = a * b * (c/d); 编译会失败并显示:

error: no match for ‘operator*’ in ‘myClass::operator*(myClass&)((* & b)) * myClass::operator/(myClass&)((* & d))’ in gcc 4.6.2.

我可能错过了一些简单的东西,但找不到它。我做错了什么?

最佳答案

正如几乎所有人所猜测的那样,问题在于缺少 const 限定符。还有一个因素是返回的是拷贝而不是引用。

有问题的无效代码是这样的:

myClass operator *= (myClass &num) { return Mul(num); }
myClass operator * (myClass &num) { return Mul(num); }

更正后的版本:

myClass& operator *= (const myClass &num) { Mul(num); return *this; }
friend myClass operator * (const myClass &num1, const myClass &num2) { myClass tmp(num1) tmp.Mul(num2); return tmp; }

关于c++ - 错误 'operator*' 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533200/

相关文章:

c++ - b/w 1==n&1 和 n&1==1 的区别,n 是一个 unsigned int

C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本

C++ 我的字符串类 : Pointer doesn't work

ios - swift 错误 : Could not find an overload for '==' that accepts the supplied arguments?

java - 对 post++ 和 --pre 运算符的操作

sql-server - 条件 SSIS - 根据结果执行一项或另一项任务

c++ - post 请求和 QNetworkAccessManager 的内存泄漏

c++ - 默认(可选)参数作为引用 c++

c++ - C++ 中的 GNU Radio QT GUI Sink

c++ - C++ 中的流重载