2015-05-10 2 views
-11
friend Fraction operator=(const Fraction &newfraction) { 

    Fraction changedfraction; 

    changedfraction.numerator = newfraction.numerator; 
    changedfraction.denominator = newfraction.denominator; 

    changedfraction.simplify(changedfraction.numerator, 
          changedfraction.denominator); 
    return (changedfraction); 
} 
+10

** Что ** ошибка ?. –

+2

Это неортодоксальная версия оператора присваивания. Оператор присваивания должен делать только одну вещь и только одну вещь, а именно - создать копию переданного в объекте существующего объекта. Он не должен выполнять «бизнес-логику», такую ​​как «упростить». – PaulMcKenzie

+0

@PaulMcKenzie: Я не согласен. Если мы предположим, что 'simplify' не семантически изменяет присваиваемое значение, просто оптимизирует его представление, а затем ссылается на него абсолютно нормально. Это скорее похоже на 'std :: string', сокращающее его емкость на' swap'. Это не «бизнес-логика» (ненавижу этот термин!). Реальная проблема с функцией OP заключается в том, что это не член 'operator =' принимает только один операнд и даже не пытается назначить что-либо тому, что должно быть операндом LHS. –

ответ

3

Оператор присваивания с подписью Fraction operator=(const Fraction &newfraction) должен быть членом. A friend Функция не является членом. Таким образом, количество параметров не соответствует 2, необходимым для назначения. Удалите friend и убедитесь, что он объявлен как функция-член.

struct Fraction 
{ 
    Fraction& operator=(const Fraction &newfraction) { .... } 
    .... 
}; 

отметить также, что традиционно оператор присваивания возвращает ссылку на *this, а не значение.

+0

большое спасибо juan. Я решил ошибку, но когда я называю ее основной, она дает некоторые произвольные числа мне. Я не могу принять правильный результат. – Can

+0

@Can. Тогда ваша реализация должна быть глючной. – juanchopanza

Смежные вопросы