gpt4 book ai didi

c++ - C++运算符重载错误:在只读对象中分配成员“”

转载 作者:行者123 更新时间:2023-12-02 10:19:30 25 4
gpt4 key购买 nike

错误信息:

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

main.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;
}

最佳答案

大概您的意图是在temp中更改operator++()的值;如果是这样,您在尝试修改r对象const时遇到错字,导致错误。您可能打算写:

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

(可以稍微缩短或以各种方式进行调整;为了清楚起见,我保留了原始的编码样式。您可能还会收到编译器警告,因为未使用 int参数 dummy)。

鉴于您实际上并没有使用 int dummy,这表明您可能正在尝试编写 前缀 ++而不是您编写的后缀。从 this answer可以看到,语法略有不同。你会写像
RationalNumber& operator++() // no args: prefix
{
++(this->numerator);
return *this;
}

尽管这将解决编译器错误,但您应该备份一些步骤,并确定 operator++()是否对您的类确实有意义;可以为 ++建立多种合理的含义。您可能希望 operator+()添加两个 RationalNumber,而不是“递增”。

关于c++ - C++运算符重载错误:在只读对象中分配成员“”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60856174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com