操作符重载,二进制表达式的操作数无效

Overloading of operators and issue with invalid operands to binary expression

本文关键字:操作数 无效 表达式 二进制 重载 操作符      更新时间:2023-10-16

我做了一个类Foo,我重载操作符< > <= >= != and =现在我有这两个代码,都应该做同样的,但只有一个工作:

如此:

Foo foo = Foo("1");
if (foo <= something->foo) { ...

这行不通:

if (Foo("1") <= something->foo) { ...

第二个版本的错误是:

二进制表达式的操作数无效。候选函数不可用:期望第一个参数为l值。'

这是什么意思,为什么它不起作用?

你写的操作符禁止传入右值;如@TartanLlama所指出的,可以使用非const引用。

bool operator<= (Foo& a, Foo& b); // will err
bool operator<= (const Foo& a, const Foo& b); // will work fine