【问题标题】:term does not evaluate to a function taking 2 arguments--error术语不计算为带 2 个参数的函数——错误
【发布时间】:2020-07-21 14:11:48
【问题描述】:

嗨,我在我的 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);
}

获取附加错误 error

我们将不胜感激。

【问题讨论】:

  • 请在您的问题中包含完整的错误

标签: c++ stl heap


【解决方案1】:

您将compareArrTime 类型的参数传递给make_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;
}
};

并且可能按const &amp; 而不是按值取t1t2

【讨论】:

  • 我已将代码更改如下- struct compareArrTime { bool operator()(const jobs &t1, const jobs &t2) { return t1.arr_time ::operator ()(_Ty1 &&,_Ty2 && ) noexcept() const' 3.Error C2056 非法表达式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多