Почему qsort вызывает ошибку в gcc 6.3.0, используя typedef enum?
Я работаю для алгоритма Сильно подключенного компонента (SCC).
Итак, я отсортировал вершины по возрастанию, используя qsort
функция.
Использовать qsort
Я сделал свою собственную функцию сравнения и использовал typedef enum{false,true} bool
,
IDE VS2017 успешно компилируется, но MinGW с gcc 6.3.0 вызывает ошибку, как показано ниже.
мой CreateSorted
а также qsort
Функция сравнения этих кодов.
// qsort compare function, descending order
bool cmp(const void *p1, const void *p2)
{
VF* vf1 = (VF*)p1;
VF* vf2 = (VF*)p2;
return vf2->f - vf1->f;
}
// Create sorted vertices array of VF structure
// For DFS of decreasing finish time vertex
VF* CreateSorted(adjList* adj)
{
VF *sorted_vertices = (VF*)malloc(sizeof(VF)*(adj->vertexNum+1));
for (int i = 1; i <= adj->vertexNum; i++) {
Node* current = adj[i].nodeList;
sorted_vertices[i].v = current->v;
sorted_vertices[i].f = current->f;
}
qsort(sorted_vertices+1, adj->vertexNum, sizeof(VF), cmp);
return sorted_vertices;
}
Что мне действительно любопытно, так это причина ошибки typedef enum{false, true} bool
,
1 ответ
Решение
Четвертый параметр qsort
должен быть указатель на функцию со следующим прототипом:
int compar (const void* p1, const void* p2)
Прототип вашей функции:
bool compar (const void* p1, const void* p2)