Я не могу понять, как исправить ошибку компиляции C2664, которая сбила меня с ума всю ночь! Ошибка возникает из вызова qsort(). Я хочу, чтобы отсортировать массив ID2IX, хранящуюся в массиве, на который указывает radioIDs:Ошибка компиляции непонятной VC++ 6 C2664
typedef struct id2ix { // struct maps radio id to array index
int id; // radio id
int ix;
} ID2IX;
ID2IX *RadioIDs = NULL; // radio IDs integer
.....
RadioIDs = (ID2IX*) malloc(totRadios * sizeof(ID2IX));
if (RadioIDs == NULL) {
return FALSE;
}
.....
// the qsort compar function
int // sort the id2ix array by radioID
//sort_by_radioID (ID2IX*one , ID2IX*two) { // tried this signature
sort_by_radioID (void*one , void*two) { // tried this signature, also
return ((ID2IX*)one)->id - ((ID2IX*)two)->id;
}
// call to qsort that will not compile
qsort(RadioIDs, totRadios, sizeof(ID2IX), sort_by_radioID);
Я получаю ошибку из этого:
Objects.cpp(295) : error C2664: 'qsort' : cannot convert parameter 4
from 'int (void *,void *)'
to 'int (__cdecl *)(const void *,const void *)'
None of the functions with this name in scope match the target type
Какого черта я делаю не так?
EDIT: Спасибо, всем. Us C/ASM-кодировщики, мы не беспокоимсь о том, что нет ни одного проклятого const.
Что произойдет, если вы добавите 'const' компилятор говорит вам не хватает? – Mat
попробуйте с подписью 'int sort_by_radioID (const void * one, const void * two)'. – Naveen
проверить, что вы также вызываете вызов по умолчанию, если это не '__cdecl', вам нужно использовать экспликацию' __cdecl' для функции – Necrolis