首页 > 解决方案 > 类中的比较函数 [错误 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);
}

标签: c++stl

解决方案


您需要将您的标记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调用它的对象的成员。


推荐阅读