从 int 类型的右值初始化 &分数类型的非常量引用无效?
invalid initialization of non-const reference of type &Fraction from rvalue of type int?
#include <iostream>
#include <utility>
using namespace std;
using namespace rel_ops;
class Fraction
{
private:
//variables to store numerator and denominator
int num;
int denom;
public:
Fraction(){}
Fraction(int num): num(num) {}
Fraction(int num, int denom): num(num), denom(denom) {}
void set_num(int n){ num = n;}
void set_denom(int d){ denom = d;}
int get_numerator() const {return num;}
int get_denominator() const {return denom;}
Fraction &operator+= (const Fraction &obj){
if (denom == obj.denom){
return num + obj.num;
}
}
};
//calculating highest common denominator
int g_c_d(int n, int d){
return d == 0? n : g_c_d(d, n % d);
}
istream &operator>> (istream &input, Fraction &f)
{
int n, d;
char slash;
input >> n;
input >> slash;
input >> d;
if (d == 0) {n = 0;} //if denom is 0; fraction = 0/0
f = Fraction(n, d);
return input;
}
ostream &operator<<(ostream &output, const Fraction &frac)
{
return output << frac.get_numerator() << "/" << frac.get_denominator();
}
int main()
{
int n, d;
Fraction frac;
Fraction frac1(3,4);
Fraction frac2(4,4);
cout << frac1 << " + " << frac2 << " = ";
cout << (frac1 += frac2) << endl;
cout << "Enter a fraction" << endl;
cin >> frac; //user inputs fraction
n = frac.get_numerator(); //get users numerator
d = frac.get_denominator(); //get users denominator
gcd = g_c_d(frac.get_numerator() , frac.get_denominator()); //calculate gcd of fraction using users input
//set new simplified values for the users fraction
frac.set_num(n/gcd);
frac.set_denom(d/gcd);
cout << "your fraction is: ";
cout << frac << endl;
return 0;
}
我正在尝试添加两个分数,这些分数来自我自己定义的类。但是我收到此错误:从 in 类型的右值初始化 &Fraction 类型的非常量引用无效。
我重载了其他运算符,如"==",它工作正常,但"+="不起作用。
您的operator +=
返回一个临时的,它应该是这样的:
Fraction &operator+= (const Fraction &obj){
if (denom == obj.denom){
num += obj.num;
} else {
// you have also to do that part
}
return *this; // return this object, not a temporary
}
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 私有类型的静态常量成员
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- 常量函数,当其参数是对文字类型的引用时
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 常量成员函数中成员变量的类型
- 无法将类型"T&"的非常量左值引用绑定到类型"T"的右值 t++ std::atomic<T>
- 从 Typedef 数据类型中删除常量
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 将整型常量映射到类型
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 为什么我总是收到此错误:从类型为"农场动物"的右值初始化类型的非常量引用无效|
- 输入参数类型"常量双 *&"是什么意思?
- 从何处获取设备类型常量描述
- 在标头中使用类型常量作为数组大小C++