[英]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.