Ошибка не соответствует "оператор *"

У меня есть класс, который делает десятичные вычисления. У меня все математические операторы перегружены. Он отлично работает для довольно простых вычислений, но завершается неудачно, когда мне нужно добавить парены. Например, оба вычисления в следующих работах и ​​получают правильный результат:

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.

Я, вероятно, упускаю что-то простое, но не могу найти это. Что я делаю неправильно?

1 ответ

Решение

Как и предполагали почти все, проблема отсутствовала 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; }
Другие вопросы по тегам