为什么这会发送有关无效初始化引用的错误

时间:2014-10-26 00:28:50

标签: c++ class operator-overloading

此代码是一个分数,用于添加/减去分数的多个输入。这是我的头文件:

#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
using namespace std;


class Fraction{

    public: 
    Fraction(int , int );
    int fraction(int,int);
    void reduce_fraction(int *,  int *);
    Fraction& operator+(const Fraction&);
    Fraction& operator-(const Fraction&);
    friend ostream& operator<<(ostream &os, const  Fraction& n);
    friend istream& operator>>(istream &is, const Fraction& n);


};

#endif

这里是重载操作符代码,导致类型'Sector&amp;'类型的非const引用的无效初始化错误来自所有三个重载的'Frations'类型的右值

Fraction& Fraction::operator+(const Fraction& n) {
    int denom = *denomp * n.denom;
    int numera = (*nump * n.numera) + (n.denom * n.nump);
    return Fraction(numera,denom);
}

Fraction& Fraction::operator-(const Fraction& n) {
    int denom = *denomp * n.denom;
    int numera = (*nump * n.numera) - (n.denom* n.nump);
    return Fraction(numera, denom);
}
Fraction& Fraction::operator=(const Fraction& n){
    if(this==&n) return *this;
    return n;
}

1 个答案:

答案 0 :(得分:0)

您的赋值运算符返回Fraction &

return n;

这是const Fraction &

这是编译器抱怨的错误。当函数返回对非const对象的引用时,您尝试返回对const对象的引用。