C++ sort函数第三个参数compare报非静态成员函数错误原因求解
错误产生原因
该错误是因为你将compare定义为了类的非静态成员函数,存在两个核心不匹配问题:
- 非静态成员函数隐含
this指针作为第一个入参,函数实际签名和std::sort要求的比较器签名不匹配:std::sort要求比较器接收两个待比较元素作为入参,而非静态成员函数的隐含this会占用第一个参数位,实际需要3个入参,无法适配。 - 非静态成员函数无法脱离类实例单独作为函数指针传递,必须绑定到具体的类实例才能调用,直接传递函数名会被编译器判定为无效的可调用对象。
常见解决方案
你可以选择以下任意一种方式修复问题:
- 将
compare修改为类的静态成员函数,静态成员函数没有隐含this指针,签名符合要求可直接传递 - 将
compare定义为全局函数,不受类成员的隐含参数限制 - 直接使用Lambda表达式作为比较器,无需单独定义比较函数,示例代码如下:
sort(intervals.begin(), intervals.end(), [](vector<int>& i1, vector<int>& i2) { return i1[0] < i2[0]; });
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

