Почему qsort вызывает ошибку в gcc 6.3.0, используя typedef enum? - PullRequest
0 голосов
/ 01 мая 2018

Я работаю для алгоритма Сильно подключенных компонентов (SCC).

Итак, я отсортировал вершины по возрастанию, используя функцию qsort.

Чтобы использовать qsort, я сделал свою собственную функцию сравнения и использовал typedef enum{false,true} bool.

VS2017 IDE успешно компилируется, но MinGW с gcc 6.3.0 вызывает ошибку, как показано ниже.

enter image description here

Мои 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 Ответ

0 голосов
/ 01 мая 2018

Четвертый параметр qsort должен быть указателем на функцию со следующим прототипом:

int compar (const void* p1, const void* p2)

Прототип вашей функции:

bool compar (const void* p1, const void* p2)

...