У меня есть небольшая проблема с ошибкой при использовании функции qsort, она показывает мне:
[Примечание] инициализация аргумента 4 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))'
он также показывает ошибку:
[Ошибка] неверное преобразование из 'int (*)(const student*, const student*)' в 'int (*)(const void*, const void*)' [-fpermissive]
int n;
qsort ((void*) databaza, size, sizeof(struct student), compare);
for (n=0; n<size; n++)
{
printf ("%d %s",databaza[SIZE].votes,databaza[SIZE].name);
}
return 0;
где функция сравнения выглядит так
int compare(const struct student* p1, const struct student* p2){
return ( p1->votes - p2->votes );
}
в структуре
struct student {
char name[SIZE];
int votes;
};
int find_student(struct student* students,int size, const char* name){
for(int i = 0;i < size;i++){
int results=strcmp(students[i].name,name);
if(results==0){
return i;
}
}
return -1;
}
Может ли кто-нибудь сказать мне, почему это происходит, я новичок в структурах и функциях, таких как qsort.
const void*, const void*
, а неconst struct student* p1, const struct student* p2
. - person chux - Reinstate Monica   schedule 06.04.2020const void *
- это указатель на тип объекта, и у вас нет выбора относительно типа аргументаqsort
. Должно бытьint (*)(const void *, const void *)
. - person Eric Postpischil   schedule 06.04.2020