我在这里要做的是重载 % 运算符,以便它将分子乘以给定的数字。我在程序中的所有其他重载运算符都可以正常工作,但是这个给我带来了问题。为了隔离这个问题,我创建了一个单独的更小的程序,只有这个重载的运算符。
从 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% 函数看起来与我工作的重载运算符没有任何不同。