Предположительно, вы намеревались изменить значение temp
на operator++()
; если это так, у вас есть опечатка, вызывающая ошибку, когда вы пытаетесь изменить r
, который является const
объектом. Вы, вероятно, хотели написать:
RationalNumber operator++ (const RationalNumber& r, int dummy)
{
RationalNumber temp;
temp = r;
temp.numerator = temp.numerator+1; // NOT "r.numerator = ..."
return temp;
}
(который может быть несколько сокращен или изменен различными способами; для ясности я оставил ваш оригинальный стиль кодирования. Возможно, вы также получаете предупреждение компилятора за неиспользование int
аргумент dummy
).
Учитывая, что вы на самом деле не используете int dummy
, можно предположить, что вы пытаетесь написать префикс ++
а не тот постфикс, который вы написали. Как видно из этого ответа , синтаксис немного отличается; вы бы написали что-то вроде
RationalNumber& operator++() // no args: prefix
{
++(this->numerator);
return *this;
}
Хотя это и исправит ошибку компилятора, вы должны сделать резервную копию в несколько шагов и определить, действительно ли operator++()
имеет смысл для вашего класса; Есть несколько разумных значений, которые можно установить sh для ++
. Вы, вероятно, хотите, чтобы operator+()
добавил два RationalNumber
s вместо "увеличения".