C 中的“不兼容的函数指针类型”

问题描述 投票:0回答:1

我想使用

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]
c qsort
1个回答
1
投票

传递给

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.