C++ 没有匹配的运算符<&书信电报;使用后增量时? 主要问题是,在键入 CUT< P>类比推理时,考虑这个设置: void doSomething(int& x) { x = 137; } int main() { doSomething(42); // Oops! }

C++ 没有匹配的运算符<&书信电报;使用后增量时? 主要问题是,在键入 CUT< P>类比推理时,考虑这个设置: void doSomething(int& x) { x = 137; } int main() { doSomething(42); // Oops! },c++,operator-overloading,C++,Operator Overloading,此代码无法编译,因为指示行中有错误。doSomething函数需要一个int&,您可以将其理解为“请给我一个实际的int变量或可以更改的int对象。”但42不是int变量-它是一个纯值,因此存在错误 现在,假设您将main更改为: int main() { int var = 42; doSomething(var++); // Oops! 表达式var++的意思是“增量var,然后返回它以前拥有的值”。这意味着我们仍在将纯值42传递给函数,并且由于函数需要对象而不是值,因此无

此代码无法编译,因为指示行中有错误。doSomething函数需要一个
int&
,您可以将其理解为“请给我一个实际的int变量或可以更改的int对象。”但42不是int变量-它是一个纯值,因此存在错误

现在,假设您将main更改为:

int main() {
    int var = 42;
    doSomething(var++); // Oops!
表达式
var++
的意思是“增量var,然后返回它以前拥有的值”。这意味着我们仍在将纯值42传递给函数,并且由于函数需要对象而不是值,因此无法编译

但是,您可以通过将doSomething更改为包含
常量int&
,来制作此版本的主要作品:

void doSomething(const int& x) {
     // do something other than change x
}
<>这个代码由于C++如何定义const引用而工作得很好。与常规引用不同,常规引用意味着“我希望能够更改此对象”,当您传入纯值时,常量引用可以正常工作,因为常量位意味着“我保证不会在这里实际更改任何内容”


现在,看看你的代码。这基本上与上面所示的想法相同:您有一个名为
operatorchange
fraction&fraction1
const fraction&fraction1
的函数-您不能将临时对象绑定到非const引用,您可以提供一个,包括必要的头,但提取到最低限度吗?此外,提供用于编译的命令行以及您得到的完整错误。作为新用户,还应获取并读取。错误消息还应指定操作数。这之后可能会有一个候选函数列表。这些是错误消息的有用部分。
void doSomething(const int& x) {
     // do something other than change x
}