このようなパラメーターを期待する関数があります
void priqueue_init(priqueue_t *q, int(*comparer)(void *, void *))
任意の型の引数を取ることができるようにしたい。
別のファイルで、最初に typedef
typedef int (*comp_funct)(job_t*, job_t*);
そして渡したい機能は…
int fcfs_funct1(job_t* a, job_t* b)
{
int temp1 = a->arrival_time;
int temp2 = b->arrival_time;
return (temp1 - temp2);
}
priqueue_init への呼び出し:
priqueue_init(pri_q, choose_comparator(sched_scheme));
そして最後に、私の choose_comparator 関数:
comp_funct choose_comparator(scheme_t scheme)
{
if (sched_scheme == FCFS)
return fcfs_funct1;
return NULL;
}
priqueue_init の呼び出しでエラーが発生しました。
libscheduler/libscheduler.c: In function ‘add_to_priq’:
libscheduler/libscheduler.c:125:3: error: passing argument 2 of ‘priqueue_init’ from incompatible pointer type [-Werror]
In file included from libscheduler/libscheduler.c:5:0:
libscheduler/../libpriqueue/libpriqueue.h:25:8: note: expected ‘int (*)(void *, void *)’ but argument is of type ‘comp_funct’
どこでハングアップしますか? priqueue_init が定義されているファイルは、タイプ job_t を認識していません。無効な引数を使用することが道だと思いました。