首页 > 解决方案 > 术语不计算为带 2 个参数的函数——错误

问题描述

嗨,我在我的 cpp 程序中使用 make_heap。我在下面写了与之对应的代码-

struct jobs {
int abs_deadline, id, rem_ET, arr_time;
};
struct compareDeadline {
bool comparator(jobs t1, jobs t2) {     
        return t1.abs_deadline < t2.abs_deadline;
}
};
struct compareArrTime {
bool comparator( jobs t1,  jobs t2) {
    return t1.arr_time < t2.arr_time;
}
};
void runningPhase(int ntasks,vector<tasks> j) {
vector<jobs> ready_queue,waiting_queue;                            
int system_criticality = 1, temp, timer = j[0].arr_time;
cout << "\nSCHEDULE:\n\n";
for (int i = 1; i <ntasks; i++) {
    if (j[i].criticality == 1) {
        temp = j[i].arr_time + j[i].deadline;
        if (timer == j[i].arr_time) {               
            ready_queue.push_back({ temp,j[i].id, j[i].wcet[0],j[i].arr_time });
        }
        else {
            waiting_queue.push_back({ temp,j[i].id,j[i].wcet[0],j[i].arr_time });
        }
    }
}
make_heap(ready_queue.begin(), ready_queue.end(), compareArrTime());
make_heap(waiting_queue.begin(), waiting_queue.end(), compareDeadline());
schedule(j, ready_queue, waiting_queue,ntasks);
}

获取附加错误 错误

任何帮助将不胜感激。

标签: c++stlheap

解决方案


您正在将类型的参数传递compareArrTimemake_heap. 没关系。让我们称之为cat。在内部make_heap,它会尝试这样调用它cat(one, two)

但是您compareArrTime没有operator ()定义。因此错误。

你应该这样写:

struct compareArrTime {
bool operator ()( jobs t1, jobs t2) const {
    return t1.arr_time < t2.arr_time;
}
};

并且可能采取t1t2const &而不是按价值。


推荐阅读