qsort给出[Error]:从'int(*)(cricketer*,cricketer*)和#x27的转换无效;改为“int(*)(const void*,const void*)和#x27;
这是代码,它通过avg运行对板球运动员的数据进行排序。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
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;