如何处理C ++非常量值错误?

时间:2018-11-08 20:28:48

标签: c++

我遇到一些错误(如下所示),我不确定是什么原因导致了这些错误。我看了看我的老师的示例代码,发现自己所做的任何事情都不会导致此错误。

我也尝试过查找错误并调整代码,但一无所获。对于出现问题的一些帮助,我将不胜感激。谢谢!

// error
Rational.cpp:60:10: error: cannot bind non-const lvalue reference of type ‘Rational&’ to an rvalue of type ‘Rational’
return Rational(num, den);
       ^~~~~~~~~~~~~~~~~~

// in Rational.h
Rational add(const Rational &r) const;

// in Rational.cpp
Rational Rational::add(const Rational &r) const
{
    int num = (numerator * r.denominator) + (denominator * r.numerator);
    int den = denominator * r.denominator; 

    return Rational(num, den);
}

p.s。我正在介绍C ++,因此,我希望您能使用更简单的术语和解释!

1 个答案:

答案 0 :(得分:4)

构造函数在应采用Rational::Rational(Rational&)引用时定义为const。您不能将临时绑定到非常量引用,并且add返回一个临时。要使用该临时变量来初始化新构造的有理数,构造函数需要采用非const引用。