c++ - 类中的比较函数 [错误 2878]:二进制“<”:未找到采用左手操作数类型的运算符
问题描述
为什么我收到这个错误?我看到一个运行此类代码的视频,完全没有错误。我不想在课外定义。怎么了?
class Person
{
public:
int age;
string name;
bool operator < (const Person& rhs) { return age < rhs.age; }
};
int main()
{
std::set<Person> my;
Person p{ 10, "Eduardo" };
my.insert(p);
}
解决方案
您需要将您的标记operator<
为存在const
,以便可以在类型的对象上调用它const Person
:
bool operator < (const Person& rhs) const { return age < rhs.age; }
^^^^^
的默认比较模板参数std::set<Person>
是std::less<Person>
,它const Person&
在其operator()
.
无论如何,您的操作员都应该是const
,因为它不会修改Person
调用它的对象的成员。
推荐阅读
- javascript - 如何使用 jest 测试以下给定的功能?
- google-api - 通过 Google Drive api v3 上传的文件是在用户驱动器而不是 shard 驱动器上创建的
- c++ - 在结构中设置数组元素时出现总线错误
- javascript - 如何访问我从客户端(NodeJs)发布的数据
- class - 类和对象的通用术语是什么?
- javascript - 如何在 Firestore 中增加一个数字?
- regex - Powershell如何使用Regex替换word文档中的标签
- spring-boot - 使用 Spring Boot 在 Spring Security 中加载具有相同前缀的属性
- node.js - 使用 express 服务器从另一个站点下载文件会生成完整的 html 源代码而不是实际文件
- python - pandas.DataFrame.hist() 占用大量内存和执行时间