Salut,
Je suis toujours sur mon programme de compression utilisant l'algorithme de Huffman (toujours au début, en fait). Je dois trier un tableau de structures, chaque structure contenant un int qui représente la valeur décimale d'un octet, et un unsigned long int qui représente le nombre d'occurences de cet octet dans le fichier à compresser.
La structure concernée est déclarée comme suit dans huffman.h :
J'ai essayé de réaliser mon tri à l'aide de la fonction qsort, l'objectif étant de trier sur la fréquence. Voici l'implémentation de ma fonction de comparaison :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 typedef struct { unsigned long int freq; int index; } s_freq_array_element;
Dans la fonction main, j'écris ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int compare (const s_freq_array_element *a, const s_freq_array_element *b) { int i; if (a->freq < b->freq) { i = -1; } if (a->freq == b->freq) { i = 0; } if (a->freq > b->freq) { i = 1; } return (i); }
A la compilation, la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int (*p_compare)(const s_freq_array_element *a, const s_freq_array_element *b); qsort (p_freq_array, freq_array_size, sizeof(s_freq_array_element), p_compare);
renvoie ce warning :
Code : Sélectionner tout - Visualiser dans une fenêtre à part qsort (p_freq_array, freq_array_size, sizeof(s_freq_array_element), p_compare);
La page de man de qsort indique que la fonction de comparaison attend deux const void *. Je croyais que dans le cas de variables de type void, le cast était implicite. Si quelqu'un pouvait m'éclairer là-dessus...main.c: In function 'main':
main.c:24: warning: passing argument 4 of 'qsort' from incompatible pointer type![]()
Merci
Partager