ОШИБКА: связать неконстантную ссылку типа lvalue с значением rvalue типа - PullRequest
1 голос
/ 22 марта 2020

У меня есть ошибка, которую я не смог исправить в своем коде.

Если я вызову свою функцию в main следующим образом:

Ratio f34(3L,4L);
const Ratio one(f34.divide(f34));

или

Ratio s = Ratio(7).divide(Ratio(8));

У меня есть ошибка, которая говорит

   error: cannot
   bind non-const lvalue reference of type ‘Ratio&’ to an
   rvalue of type ‘Ratio’

, а вот мой конструктор Ratio и функция деления:

Ratio::Ratio( long numerator,  long denominator) : nu(numerator) , de(denominator) {
    if (denominator == 0) {
        throw std::runtime_error("Cannot divide by 0");
    }
}

Ratio Ratio::divide(Ratio r) {

        long num = r.de *nu;
        long den = de * r.nu;
        Ratio result(num,den);

        return result;

    }

Примечание: nu и de являются частными переменные в классе Ratio.

Я пытался изменить аргумент деления на (const Ratio & r), но это не решило проблему. У меня все та же ошибка.

Что я понимаю, так это то, что компилятор жаловался на то, что он не может сделать временную копию объекта. Я до сих пор понятия не имею, как я могу решить это. Я перепробовал все! пожалуйста помогите:).

...