You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类内调用sort函数提示无效使用非静态成员的原因及解决方法

作业调度算法STL sort调用报错问题分析及解决

错误原因

你定义的myfunc是Solution类的非静态成员函数,C++中非静态成员函数默认会携带隐含的this指针作为第一个入参,所以myfunc的实际签名是bool myfunc(Solution* this, Job i, Job j),而STL的std::sort要求传入的比较函数必须只接收两个待比较元素作为入参,参数数量、类型都不匹配,因此编译报错。

解决方案

你可以选择以下任意一种方式修复:

  • 将比较函数改为类静态成员
    静态成员函数不会携带隐含的this指针,签名符合std::sort的要求,修改方法为在myfunc定义前添加static关键字:
static bool myfunc(Job i,Job j){
    return i.profit > j.profit;
}
  • 直接使用Lambda表达式作为比较参数
    不需要额外定义独立的比较函数,直接在调用sort时传入Lambda,代码更简洁:
sort(arr, arr + n, [](const Job& a, const Job& b) {
    return a.profit > b.profit;
});
  • 将比较函数定义为全局函数
    把myfunc的定义移到Solution类的外部,作为全局函数,自然不会有隐含的this指针,也符合要求。

额外提示:你原代码还存在两处致命错误会导致运行崩溃/超时:

  1. Job arr[n];是C语言变长数组语法,不属于C++标准规范,只有部分编译器支持扩展,建议替换为vector<Job> arr(arr2, arr2 + n)实现相同效果。
  2. int slot[INT_MAX];完全不可行:INT_MAX通常取值为2^31-1,申请如此大的栈数组会直接触发栈溢出,且遍历初始化INT_MAX次会直接超时,建议先统计所有作业的最大截止时间,再根据最大截止时间动态创建slot数组/vector。

内容的提问来源于stack exchange,提问作者Rishabh Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:39:02