【发布时间】:2015-04-07 08:33:16
【问题描述】:
我尝试对结构进行排序,但出现此错误:
error: cannot convert ‘std::vector<Node>’ to ‘void*’ for argument ‘1’ to ‘void qsort(void*, size_t, size_t, __compar_fn_t)’
qsort(nodes,nodes.size(), sizeof(Node), dataClustering::compare);
这是我的代码: 比较函数:
int compare(const void * node1, const void * node2){
string name1 = ((const struct Node*)node1)->name;
string name2 = ((const struct Node*)node2)->name;
int start1 = ((const struct Node*)node1)->start;
int start2 = ((const struct Node*)node2)->start;
if(name1 <= name2 && start1 <= start2){
return -1;
}
else if(name1 > name2 && start1 > start2){
return 1;
}
else{
return 0;
}
}
在另一个函数中调用比较:
qsort(allNodes,allNodes.size(), sizeof(Node), compare);
以及 .hpp 文件中的标头(我尝试将其放在静态中,但这并不能解决错误):
int compare(struct Node *, struct Node *);
【问题讨论】:
-
TL;DR
C++不支持指针隐式转换到/fomvoid * -
听你的编译器:
allNodes不是void*。 -
为什么你想这样做,而不是更理智的
std::sort(begin(nodes), end(nodes))? -
@user3608663 那么为什么不使用
std::sort(begin(nodes), end(nodes), compare_functor)呢? -
永远不要在 C++ 中使用
qsort。如果您不知道如何使用std::sort来满足您的目的,请询问如何使用std::sort,而不是如何使用qsort。