Термин не относится к функции, принимающей 2 аргумента - ошибка - PullRequest
0 голосов
/ 09 апреля 2020

привет, я использую make_heap в моей программе cpp. Ниже я написал код, соответствующий этому -

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);
}

Ошибка прикрепления Ошибка

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 апреля 2020

Вы передаете аргумент типа 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;
}
};

и, вероятно, примите t1 и t2 по const &, а не по значению.

...