条件表达式中的指针类型不匹配

时间:2015-06-03 13:01:24

标签: c pointers

我正在学习指针,我复制了一个快速实施。  当我编译时,gcc显示错误:

  

条件表达式中的指针类型不匹配

调用错误的行是:

qSort((void**)lineptr, 0, nlines-1, (int(*)(void*, void*))(numeric ? numcmp : strcmp)); 

该代码中的类型与初始化类型相同:

void qSort(void *lineptr[], int left, int right, int (*comp)(void *, void *));

以下是numcmp实施:

int numcmp(char *s1, char *s2) 
{ 
    double v1, v2; v1 = atof(s1); 
    v2 = atof(s2); 
    if (v1 < v2) 
        return -1; 
    else if (v1 > v2) 
        return 1; 
    else
        return 0; 
}

1 个答案:

答案 0 :(得分:1)

有问题的条件表达式是:

numeric ? numcmp : strcmp

编译器抱怨子表达式numcmp的类型与子表达式strcmp的类型不同。前者的类型为int (*)(char *, char *),后者的类型为int (*)(const char *, const char *)(前提是您已记住#include <string.h>,您必须这样做)。这些不一样,甚至不兼容(在标准的术语意义上&#34;兼容&#34;)。

您可以通过向函数const的参数添加numcmp()限定符来解决错误。但是,海湾合作委员会仍然会抱怨你对表达的价值所做的演员表。