Ajout dans un arbre et problème de pointeurs [Résolu]

Signaler
Messages postés
47
Date d'inscription
samedi 17 décembre 2005
Statut
Membre
Dernière intervention
14 décembre 2006
-
Messages postés
47
Date d'inscription
samedi 17 décembre 2005
Statut
Membre
Dernière intervention
14 décembre 2006
-
#include <stdio.h>




#include <stdlib.h>




typedef
struct poste
{

        long info ;     

        struct poste *fg, *fd ;
} poste ;

typedef poste *ptr_poste ;

void ajout_poste(ptr_poste *p, long val)
{

        if(*p == NULL)

        {

                *p= malloc(sizeof(poste)) ;

                *p.info= val ;

                *p->fg= NULL ;

                *p->fd= NULL ;

        }

        elseif(val < *p->info)

        {

                ajout_poste(&amp;(*p->fg), val) ;

        }

        else

        {

                ajout_poste(&amp;(*p->fd), val) ;

        }
}

int main()
{

        ptr_poste MonArbre ;

        

        

        ajout_poste(&amp;MonArbre, 10) ;

        

        system("pause") ;

        return0 ;
}







Bon, j'ai recopié un code qui paraîssait sans histoire sur le papier sauf qu'à la compilation j'ai le droit à ces messages :


gcc main.c -o main.exe


main.c: In function `ajout_poste':


main.c:18: error: request for member `info' in something not a structure or union


main.c:19: error: request for member `fg' in something not a structure or union


main.c:20: error: request for member `fd' in something not a structure or union


main.c:22: error: request for member `info' in something not a structure or union


main.c:24: error: request for member `fg' in something not a structure or union


main.c:28: error: request for member `fd' in something not a structure or union


make: *** [main.exe] Error 1


Une âme charitable pouraît-elle me sortir de ce mauvais pas ?


Merci d'avance

Nikö

4 réponses

Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
10
Vecchio a vu juste, probleme de priorité.
Par contre tu passes a ta fonction un ptr_poste *p, ce qui est la meme chose que poste **p.
Donc il ne faut pas faire (*p).info, mais (*p)->info et idem pour les autres champs (fg et fd).
Vive le C
Savon
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Problème de priorité d'opérateurs sans doute:

*p.info= val ;

Il faut mettre
(*p).info= val ;
ou mieux:
p->info = val;

Pareil pour les autres champs de la structure

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Ah oui j'avais pas fait gaffe

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
47
Date d'inscription
samedi 17 décembre 2005
Statut
Membre
Dernière intervention
14 décembre 2006

C'est bon merci.

J'ai passé du temps sur cette connerie et il me semble même qu'hier, ce que vous me dîtes ne marchait pas !

Tout va bien désormais !

Nikö