bonjour,
Depuis hier je me casse la tête sans trouver de solution.
Je cherche à trier le contenu d'une structure.
Ma structure comporte uniquement un tableau de char.
ex.
J'ai réussi a trier les élément via qsort en compilant mon programme sous UNIX. Aucun problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct event { char value[30]; };
voici le code que j'utilisais sous UNIX qui fonctionne (extrait)
Cependant je dois porter celui-ci sous z/OS (IBM). Mon problème est que je n'arrive plus à compiler....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 /* la structure */ struct event { char value[MAX_LEN_RECORD+1]; }; /* la fonction de tri */ int comp(const void *va, const void *vb) { const struct event *pa = va, *pb = vb; return strcmp (pa->value, pb->value); } /* appel du tri via qsort */ qsort(event,c,sizeof (event[0]),comp);
j'obtiens les messages suivants :
En recherchant sur le site d'IBM, j'ai trouvé un exemple pour des chaines de caractères. Cependant je n'arrive pas à adapter celui-ci afin qu'il fonctionne avec ma structure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 An object or reference of type "const event *" cannot be initialized with an expression of type "const void *". A parameter of type "extern "C" int (*)(const void *,const void *)" cannot be initialized with an expression of type "int (const void *, const void *)". The error occurred while converting to parameter 4 of "qsort(void *, size_t, size_t, extern "C" int (*)(const void *, const void *))"
En fait je ne comprend pas la syntaxe qui est renvoyé par la fonction de compare de cet exemple
Voici l'exemple fourni (que j'ai réussi à compiler sans problème):
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
18
19
20 #include <stdio.h> #include <stdlib.h> #include <string.h> /* Declaration of compare() as a function */ #ifdef __cplusplus extern "C" int compare(const void *, const void *); #else int compare(const void *, const void *); /* macro is automatically */ #endif /* defined by the C++/MVS compiler */ int main (int argc, char *argv[ ]) { int i; argv++; argc--; qsort((char *)argv, argc, sizeof(char *), compare); for (i = 0; i < argc; ++i) printf("%s\n", argv[i]); return 0; } int compare (const void *arg1, const void *arg2) { /* Compare all of both strings */ return(strcmp(*(char **)arg1, *(char **)arg2)); }
Pourriez vous m'aider, car là je touche le fond....
Merci
Partager