【发布时间】:2013-11-15 04:42:20
【问题描述】:
又是我,我正在处理 zipType 的数组的 qsort。我写的比较函数是这样的:
int compare(const void *v1, const void *v2){
const struct zipType *p1 = v1;
const struct zipType *p2 = v2;
if (p1->postalCode > p2->postalCode)
return(+1);
else if (p1->postalCode < p2->postalCode)
return(-1);
else
return(0);
}
这是使用它的函数:
void binRead(zipType *zip, fstream *input){
int junk;
int count;
int end;
input->seekg(0,ios::end);
end=input->tellg();
count=input->tellg()/24;
input->seekg(0);
while(input->tellg()!=end){
for(int i=0;i<count;i++){
input->read((char*)( &(zip[i].postalCode) ), sizeof(int ));
input->read((char*)( &junk ), sizeof(int ));
input->read((char*)( &(zip[i].longitude) ), sizeof(double ));
input->read((char*)( &(zip[i].latitude) ), sizeof(double ));
cout << "Currently at position" << input->tellg() << endl;
}
}
cout << "Array Created, Please wait while I sort" << endl;
qsort(zip, count, sizeof(int), compare);
usleep(3000000);
cout << "Array Sorted" << endl;
}
我遇到的错误是以下几个:
invalid conversion from ‘const void*’ to ‘const zipType*’ [-fpermissive]
const struct zipType *p2 = v2;
其中之一:
error: cannot convert ‘zipType’ to ‘void*’ for argument ‘1’ to ‘void qsort(void*, size_t, size_t, int (*)(const void*, const void*))’
qsort(*zip, count, sizeof(int), compare);
任何想法我应该做什么?
【问题讨论】:
-
C 还是 C++?只能有一个。
-
你需要像这样调用
qsort()。qsort((void *)zip, count, sizeof(*zip), compare);因为 zip 是一个包含多个元素的类,所以qsort()的第三个参数是qsort()正在排序的每个元素的大小。同样,qsort()的第一个值需要是指向元素数组的基指针,每个元素的大小作为第三个参数传递。 -
const struct zipType *p2 = (const struct zipType*)v2; -
@user2990286:为什么你不想使用 std::sort?
-
使用 qsort 代替 sort 只是任务的一部分。除此之外没有真正的原因。我可以在 main 中更容易地做到这一点,但我认为如果函数继续进行排序会更好看。 :S