Bonjour à tous,

Dans le cadre de la migration d'un programme PROC (C avec du SQL) d'un compilateur à un autre, je me retrouve avec un souci sur la fonction QSORT.

Le but de cette fonction est de trier un tableau de structures.

L'erreur de compilation se trouve sur la ligne suivante (voir fonction FsortBuffer plus bas) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
return strcmp (pa->wHOSTSTRING, pb->wHOSTSTRING);
line 688.19: 1506-285 (S) The indirection operator cannot be applied to a pointer to an incomplete struct or union

Il semblerait que le void const ne gére que des structures incomplétes (?!!).
C'est pourtant comme cela qu'il faut faire d'après le site http://emmanuel-delahaye.developpez.com/qsort.htm (?!!).


Appel à la fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
qsort (wBufferAR, sizeof wBufferAR / sizeof *wBufferAR, sizeof *wBufferAR, FsortBuffer);

fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
static int FsortBuffer (void const *in1, void const *in2)
{
 
   /* definir des pointeurs type's et initialise's
      avec les parametres */
   struct BUFFER_AR const *pa = in1;
   struct BUFFER_AR const *pb = in2;
 
   /* evaluer et retourner l'etat de l'evaluation (tri croissant) */
   return strcmp (pa->wHOSTSTRING, pb->wHOSTSTRING);
}

définition de la structure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
typedef struct {
    char   wCMPCODE_DEST[12+1];
    char   wCMPCODE[12+1];
    char   wDOCCODE[12+1];
    char   wDOCNUM[12+1];
    char   wDOCSTAT[1+1];
    char   wHOSTSTRING[7];
} BUFFER_AR;

Quelqu'un sait comment résoudre ce souci ?
Au pire, une solution de contournement ?


Je vous remercie d'avance!