繁体   English   中英

C++ 运算符重载错误:只读成员“”的赋值 object

[英]C++ operator overloading error: assignment of member" " in read-only object

错误信息:

class.cpp: In function 'RationalNumber operator++(const RationalNumber&, int)':
class.cpp:27:28: error: assignment of member 'RationalNumber::numerator' in read-only object
  r.numerator = r.numerator+1;

为什么它是“在只读对象中”?

class.h文件

#ifndef CLASS_H
#define CLASS_H
#include <iostream>
using namespace std;
// #include "class2.h"

class RationalNumber
{
 private:
  int numerator,denominator;
 public:
    RationalNumber(int x,int y);
    RationalNumber();
    friend ostream& operator << (ostream& os,const RationalNumber& x);
    friend RationalNumber operator++ (const RationalNumber& r, int dummy);
    RationalNumber operator- (const RationalNumber& r) {
        RationalNumber r3;
        //cout << numerator << " " << r.numerator<<endl;
        r3.numerator = (numerator * r.denominator)-(r.numerator * denominator);
        r3.denominator = r.denominator * denominator;
        return r3;
    }

};
#endif

主.cpp

#include <iostream>
using namespace std;
#include "class.h"
// #include "class2.h"

int main()
{
    RationalNumber r1(21,7),r2(67,31),r3;
    r3 = r1 - r2;
    cout << r3;
    r1++;
    cout << r1;
}

有错误的cpp部分

RationalNumber operator++ (const RationalNumber& r, int dummy) 
{
    RationalNumber temp;
    temp = r;
    r.numerator = r.numerator+1;
    return temp;
}

错误信息:

class.cpp: In function 'RationalNumber operator++(const RationalNumber&, int)':
class.cpp:27:28: error: assignment of member 'RationalNumber::numerator' in read-only object
  r.numerator = r.numerator+1;

为什么是“在只读对象中”?

类.h文件

#ifndef CLASS_H
#define CLASS_H
#include <iostream>
using namespace std;
// #include "class2.h"

class RationalNumber
{
 private:
  int numerator,denominator;
 public:
    RationalNumber(int x,int y);
    RationalNumber();
    friend ostream& operator << (ostream& os,const RationalNumber& x);
    friend RationalNumber operator++ (const RationalNumber& r, int dummy);
    RationalNumber operator- (const RationalNumber& r) {
        RationalNumber r3;
        //cout << numerator << " " << r.numerator<<endl;
        r3.numerator = (numerator * r.denominator)-(r.numerator * denominator);
        r3.denominator = r.denominator * denominator;
        return r3;
    }

};
#endif

主程序

#include <iostream>
using namespace std;
#include "class.h"
// #include "class2.h"

int main()
{
    RationalNumber r1(21,7),r2(67,31),r3;
    r3 = r1 - r2;
    cout << r3;
    r1++;
    cout << r1;
}

cpp 部分有错误

RationalNumber operator++ (const RationalNumber& r, int dummy) 
{
    RationalNumber temp;
    temp = r;
    r.numerator = r.numerator+1;
    return temp;
}

正如所指出的,const 运算符表示您不能修改r 这是后缀 ++ 运算符的正确声明和实现:

...
    friend RationalNumber& operator++ (RationalNumber& r, int dummy);
...
RationalNumber& operator++ (RationalNumber& r, int dummy) 
{
    r.numerator += 1;
    return r;
}

然而,也正如所指出的,像这样使用增量运算符会让人感到困惑。 如果将分数增加 1 个整数而不是分子增加 1 似乎更有意义。比如 3/7 + 1 = 10/7
相反,你做的是 3/7 + 1/7 = 4/7

注意:我已经删除了临时变量,以便您返回原始的 object,因为这是运算符的目的,而不是创建新的 object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM