我想使用
qsort
函数,但出现错误。谁能告诉我如何修复代码?
int cmp_arv(struct train *t1,
struct train *t2)
{
return (t1->arv - t2->arv);
}
void prepare_data(void)
{
int i;
for (i = 0; i < nconn; i++){
rtrains[i].from = trains[i].to;
rtrains[i].to = trains[i].from;
rtrains[i].dpt = BIAS- trains[i].arv;
rtrains[i].arv = BIAS- trains[i].dpt;
rtrains[i].fare = trains[i].fare;
}
qsort (trains, nconn,sizeof(struct train), cmp_arv);
qsort (rtrains, nconn, sizeof(struct train), cmp_arv);
}
错误消息如下所示:
incompatible function pointer types passing 'int (struct train *, struct train *)'
to parameter of type 'int (* _Nonnull)(const void *, const void *)' [-Wincompatible-function-pointer-types]
传递给
qsort
的比较函数具有固定类型,因此不能依赖于任何用户定义的数据类型。要使用您自己的类型,您需要在函数内强制转换指针类型,以便维护所需的原型。对于您的情况,您需要以下内容:
int cmp_arv(const void *t1_arg,
const void *t2_arg)
{
const struct train *t1 = t1_arg;
const struct train *t2 = t2_arg;
return t1->arv - t2->arv;
}