Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
qsort给出[Error]:从'int(*)(cricketer*,cricketer*)和#x27的转换无效;改为“int(*)(const void*,const void*)和#x27;_C_Qsort - Fatal编程技术网

qsort给出[Error]:从'int(*)(cricketer*,cricketer*)和#x27的转换无效;改为“int(*)(const void*,const void*)和#x27;

qsort给出[Error]:从'int(*)(cricketer*,cricketer*)和#x27的转换无效;改为“int(*)(const void*,const void*)和#x27;,c,qsort,C,Qsort,这是代码,它通过avg运行对板球运动员的数据进行排序。qsort功能显示错误: [错误]C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: 错误:从int(*)(cricketer*,cricketer*)到的转换无效 int(*)(常量无效*,常量无效*) [错误]C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: 错误:初始化'void qsort(void*,size

这是代码,它通过avg运行对板球运动员的数据进行排序。
qsort
功能显示错误:

[错误]C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: 错误:从
int(*)(cricketer*,cricketer*)
到的转换无效
int(*)(常量无效*,常量无效*)

[错误]C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: 错误:初始化'void qsort(void*,size\u t,size\u t, int()(常量无效,常量无效*)'

包括
#包括
struct cricketer//有关cricketer详细信息的结构
{
国际平均运行;
字符名[20];
智力年龄;
不匹配;
}c[4];
int排序(struct cricketer*a,struct cricketer*b)//预定义排序函数
int main()//主函数
{
int i,s;
for(i=0;i<3;i++)//枚举结构记录。
{
printf(“输入板球运动员的姓名”);
fflush(stdin);
获取(c[i].name);
printf(“输入他的年龄、比赛次数和总平均分”);
scanf(“%d%d%d”,&c[i]。年龄,&c[i]。匹配号,&c[i]。平均运行时间);
}
printf(“排序前记录”);
对于(i=0;i<3;i++)
{
printf(“\n\n名称”);
put(c[i].name);
printf(“年龄%d\n没有匹配项%d\n平均运行时间%d\n”,c[i]。年龄,c[i]。匹配号,c[i]。平均运行时间);
}
qsort(c,3,sizeof(c[0]),sort);//使用qsort进行排序
printf(“排序后的记录”);
对于(i=0;i<3;i++)
{
printf(“\n\n名称”);
put(c[i].name);
printf(“年龄%d\n没有匹配项%d\n平均运行时间%d\n”,c[i]。年龄,c[i]。匹配号,c[i]。平均运行时间);
}
}
int-sort(struct cricketer*a,struct cricketer*b)//排序函数定义
{
如果(a->avg_run==b->avg_run)
返回0;
其他的
如果(a->avg_run>b->avg_run)
返回1;
其他的
返回-1;
}

传递给
qsort
的指针必须为

int sort(const void* va, const void* vb);
因为这正是
qsort
所期望的。那么,在这个函数中,您必须在开始时执行

const struct cricketer *a = (struct cricketer*) va;
const struct cricketer *b = (struct cricketer*) vb;
或者如果您喜欢使用点而不是箭头访问

const struct cricketer a = *(struct cricketer*) va;
const struct cricketer b = *(struct cricketer*) vb;
请看下面的示例


关于错误消息,此
int(*)(cricketer*,cricketer*)
是指向函数的指针,该函数将两个指向
cricketer
的指针作为参数。编译器需要这样一个函数指针
int(*)(const void,const void*)
,它告诉您不能将前者转换为后者。还要注意,由于sort不应该修改数据,所以您需要指向const数据的指针

理想情况下,您希望在这些指针上保留
const
限定符。
const struct cricketer a = *(struct cricketer*) va;
const struct cricketer b = *(struct cricketer*) vb;