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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
struct event {
 char value[30];
};
J'ai réussi a trier les élément via qsort en compilant mon programme sous UNIX. Aucun problème.
voici le code que j'utilisais sous UNIX qui fonctionne (extrait)
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);
Cependant je dois porter celui-ci sous z/OS (IBM). Mon problème est que je n'arrive plus à compiler....
j'obtiens les messages suivants :
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 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
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