gpt4 book ai didi

c++ - 重载运算符 %

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:22 27 4
gpt4 key购买 nike

我在这里尝试做的是重载 % 运算符,以便它将分子乘以给定的数字。我在程序中的所有其他重载运算符都工作得很好,但是这个给我带来了问题。为了隔离这个问题,我创建了一个单独的小程序,只有这个重载的运算符。

来自 modu.h 文件(希望省略一些不相关的部分):

class fraction {
private:
int numerator, denominator;
public:
fraction ();
fraction (int n, int d);
void print ();
void operator% (int x);
};

// the constructors and print functions work fine for the other overloaded
// operators so I decided to omit them

void fraction::operator%(int x) {
numerator = numerator * x;
}

当我像这样在 main.cpp 文件中使用它们时

fraction frct (2, 3); // declare a fraction with a value of 2/3
frct = frct % 3;

我得到这些错误

modu.cpp:9:17: error: no match for ‘operator=’ in ‘frct = frct.fraction::operator%(3)’
modu.cpp:9:17: note: candidate is:
In file included from modu.cpp:3:0:
modu.h:6:7: note: fraction& fraction::operator=(const fraction&)
modu.h:6:7: note: no known conversion for argument 1 from ‘void’ to ‘const fraction&’

当我像“frct = frct.%(3);”那样使用它时,我得到了错误:

modu.cpp:9:15: error: expected unqualified-id before ‘%’ token

我已经多次检查过是否缺少分号和大括号,但一切似乎都应该是有序的,并且 operator% 函数看起来与我正在工作的重载运算符没有任何不同。

最佳答案

重载运算符函数中没有返回值。这样做:

fraction & fraction::operator% (int x) {
numerator = numerator * x;
return *this;
}

此外,由于您实际上是在更改对象的值,因此使用不同的运算符(如 %= )也许会更容易混淆?

编辑: 看看您实际如何使用运算符(将结果分配回对象)我认为如果它实际上没有改变对象而是创建一个新实例会更好结果,像这样:

fraction fraction::operator% (int x) const {
fraction result(*this);
result.numerator = numerator * x;
return result;
}

关于c++ - 重载运算符 %,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261027/

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