Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1819 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] probleme de structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] probleme de structure

n°231277
Tricky
En tapinant.
Posté le 20-10-2002 à 16:49:03  profilanswer
 

hello world :hello:
 
G un gros probleme:

Code :
  1. #ifndef ABR_H
  2. #define ABR_H
  3. typedef struct{
  4.    int val;
  5.    noeud *gauche;
  6.    noeud *droit;
  7.    noeud *pere;
  8.     }noeud;
  9.    
  10. void afficherDansOrdre(noeud *);
  11. noeud * rechercherMax(noeud *);
  12. #endif


 
dans mon main() je déclare plusieurs noeud n1,n2......et je les initialisent.....
Oui mais le compilateur (gcc) il aime pas du tout:
In file included from abr.c:2:
abr.h:6: parse error before `noeud'

 

Code :
  1. main()
  2. {
  3. noeud n8;
  4. n8.droit = NULL;
  5. n8.gauche = NULL;
  6. n8.val = 22;
  7. noeud n7;
  8. n7.droit = &n8;
  9. n7.gauche = NULL;
  10. n7.val = 15;
  11. noeud n6;
  12. n6.droit = NULL;
  13. n6.gauche = NULL;
  14. n6.val = 9;
  15. noeud n5;
  16. n5.droit = NULL;
  17. n5.gauche = NULL;
  18. n5.val = 6;
  19. noeud n4;
  20. n4.droit = &n5;
  21. n4.gauche = &n6;
  22. n4.val = 8;
  23. noeud n3;
  24. n3.droit = &n7;
  25. n3.gauche = &n4;
  26. n3.val = 10;
  27. noeud n2;
  28. n2.droit = NULL;
  29. n2.gauche = NULL;
  30. n2.val = 3;
  31. noeud n1;
  32. n1.droit = &n3;
  33. n1.gauche = &n2;
  34. n1.val = 5;
  35. n1.pere = NULL;
  36. n2.pere = &n1;
  37. n3.pere = &n1;
  38. n4.pere = &n3;
  39. n5.pere = &n4;
  40. n6.pere = &n4;
  41. n7.pere = &n3;
  42. n8.pere = &n7;
  43. noeud *racine = &n1;
  44. noeud *max = rechercherMax(racine);
  45. printf("Max: %d\n",max->val);
  46. }


 
quelqu'un a une idée ???
Merci d'avance  :)


Message édité par Tricky le 20-10-2002 à 16:56:34
mood
Publicité
Posté le 20-10-2002 à 16:49:03  profilanswer
 

n°231280
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 16:51:08  profilanswer
 

peut etre que si tu postais le main(), on pourrait t'aider un peu plus....


---------------
J'ai un string dans l'array (Paris Hilton)
n°231282
chrisbk
-
Posté le 20-10-2002 à 16:51:59  profilanswer
 

Code :
  1. typedef struct noeud{
  2.         int val;
  3.         noeud *gauche;
  4.         noeud *droit;
  5.         noeud *pere;
  6.        }noeud;


 
peut etre ?

n°231283
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 16:52:00  profilanswer
 

Sinon, essaie ceci :
 

Code :
  1. typedef struct noeud{
  2.         int val;
  3.         noeud *gauche;
  4.         noeud *droit;
  5.         noeud *pere;
  6.        };


 
Edit : grilled d'une seconde !!!  :fou:  
Mais peut être pas :
chrisbk> notre ami a dit qu'il déclarait noeud dans son main, et toi tu le déclares dans le .h
donc j'ai plus raison que toi  :sol:


Message édité par Harkonnen le 20-10-2002 à 16:53:42

---------------
J'ai un string dans l'array (Paris Hilton)
n°231284
chrisbk
-
Posté le 20-10-2002 à 16:53:01  profilanswer
 

Harkonnen a écrit a écrit :

Sinon, essaie ceci :
 

Code :
  1. typedef struct noeud{
  2.         int val;
  3.         noeud *gauche;
  4.         noeud *droit;
  5.         noeud *pere;
  6.        };






 
tu es rapide cowboy, mais encore assez :sol: :D

n°231286
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 16:54:16  profilanswer
 

chrisbk a écrit a écrit :

 
 
tu es rapide cowboy, mais encore assez :sol: :D




j'ai édité ;)


---------------
J'ai un string dans l'array (Paris Hilton)
n°231287
chrisbk
-
Posté le 20-10-2002 à 16:56:24  profilanswer
 

Bah je fais que renommer la struct comme toi au debut, sauf que j'ai laissé le nom a la fin (aucune idée a quoi il sert celui la, quand je nomme au début, alors bon, je laisse....)

n°231290
Tricky
En tapinant.
Posté le 20-10-2002 à 16:58:58  profilanswer
 

g rajouté le main()  :)  
g éssayé les propositions d'harkonnen & chrisbk mais sa change rien  :cry:  
Sa serait pas parce que ma structure contient un pointeur vers une structure du meme type ??

n°231300
chrisbk
-
Posté le 20-10-2002 à 17:12:01  profilanswer
 

normal :O
 
t en C, tu fais deja les declarations, ensuite le code :O
 
(et oublie pas le #include "arbre.h" )

n°231308
Tricky
En tapinant.
Posté le 20-10-2002 à 17:28:33  profilanswer
 

chrisbk a écrit a écrit :

normal :O
 
t en C, tu fais deja les declarations, ensuite le code :O
 
(et oublie pas le #include "arbre.h" )




 
Euhh la je vois pas trop ce que tu veux dire!
P.S: J'avais mis l'include.

mood
Publicité
Posté le 20-10-2002 à 17:28:33  profilanswer
 

n°231314
nicolasm
Posté le 20-10-2002 à 17:35:23  profilanswer
 

tricky a écrit a écrit :

hello world :hello:

Code :
  1. main()
  2. {
  3. /* declarations au debut */
  4. noeud n8,n7,n6,n5,n4,n3,n2,n1;
  5. /* suite de tes affectations */
  6. n8.droit = NULL;
  7. n8.gauche = NULL;
  8. n8.val = 22;
  9. n7.droit = &n8;
  10. n7.gauche = NULL;
  11. n7.val = 15;
  12. n6.droit = NULL;
  13. n6.gauche = NULL;
  14. n6.val = 9;
  15. n5.droit = NULL;
  16. n5.gauche = NULL;
  17. n5.val = 6;
  18. n4.droit = &n5;
  19. n4.gauche = &n6;
  20. n4.val = 8;
  21. n3.droit = &n7;
  22. n3.gauche = &n4;
  23. n3.val = 10;
  24. n2.droit = NULL;
  25. n2.gauche = NULL;
  26. n2.val = 3;
  27. n1.droit = &n3;
  28. n1.gauche = &n2;
  29. n1.val = 5;
  30. n1.pere = NULL;
  31. n2.pere = &n1;
  32. n3.pere = &n1;
  33. n4.pere = &n3;
  34. n5.pere = &n4;
  35. n6.pere = &n4;
  36. n7.pere = &n3;
  37. n8.pere = &n7;
  38. noeud *racine = &n1;
  39. noeud *max = rechercherMax(racine);
  40. printf("Max: %d\n",max->val);
  41. }


 
Ca ira mieux a mon avis




Message édité par nicolasm le 20-10-2002 à 17:37:00
n°231317
Tricky
En tapinant.
Posté le 20-10-2002 à 17:38:44  profilanswer
 

nop sa change rien  :sweat:
D'apres le compilateur, le probleme vient du .h
 

In file included from abr.c:2:
abr.h:6: parse error before `noeud'

n°231320
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 17:44:07  profilanswer
 

C'est une structure autoréférentielle !!!
Vire le typedef :
 

Code :
  1. #ifndef ABR_H
  2. #define ABR_H
  3.  
  4. struct noeud {
  5.         int val;
  6.         noeud *gauche;
  7.         noeud *droit;
  8.         noeud *pere;
  9. };
  10.        
  11. void afficherDansOrdre(noeud *);
  12. noeud * rechercherMax(noeud *);
  13.  
  14. #endif


Message édité par Harkonnen le 20-10-2002 à 17:44:54

---------------
J'ai un string dans l'array (Paris Hilton)
n°231325
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 17:48:40  profilanswer
 

Code :
  1. typedef struct _noeud
  2. {
  3.         int val;
  4.         _noeud *gauche;
  5.         _noeud *droit;
  6.         _noeud *pere;
  7. } noeud;


---------------
du bon usage de rand [C] / [C++]
n°231337
Tricky
En tapinant.
Posté le 20-10-2002 à 18:03:25  profilanswer
 

:cry:  :cry:  :cry:  :cry:  :cry:  
G éssayé les soluces d'harkonnen et taz@ppc mais sa change rien ! :ouch: Y a pas de mot clef a mettre quand on utilise une structure "autoreferentielle" ??

n°231349
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 18:21:41  profilanswer
 

daisolai, movaise habitude de C++
 

Code :
  1. typedef struct _noeud
  2.   { 
  3.             int val; 
  4.             struct _noeud *gauche;
  5.             struct _noeud *droit;
  6.             struct _noeud *pere;
  7.   } noeud;


Message édité par Taz@PPC le 20-10-2002 à 18:21:55

---------------
du bon usage de rand [C] / [C++]
n°231350
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-10-2002 à 18:23:55  profilanswer
 

Taz@PPC a écrit a écrit :

daisolai, movaise habitude de C++
 

Code :
  1. typedef struct _noeud
  2.   { 
  3.             int val; 
  4.             struct _noeud *gauche;
  5.             struct _noeud *droit;
  6.             struct _noeud *pere;
  7.   } noeud;






putain, c'était ça effectivement !!
moi aussi je me plaçais dans une optique C++ et j'ai pas percuté !  :fou:


---------------
J'ai un string dans l'array (Paris Hilton)
n°231355
Tricky
En tapinant.
Posté le 20-10-2002 à 18:30:14  profilanswer
 

Merci taz@ppc sa fonctionne deja mieu!! (plus d'erreurs dans le .h)
Par contre apparement il n'aime pas les déclarations de ce type:

Code :
  1. noeud n7;
  2. n7.val = 9;
  3. .......


 
le compilateur me dit:
abr.c: In function `main':
abr.c:152: parse error before `n7'
abr.c:153: `n7' undeclared (first use in this function)


Message édité par Tricky le 20-10-2002 à 18:30:47
n°231356
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 18:35:39  profilanswer
 

tricky a écrit a écrit :

Merci taz@ppc sa fonctionne deja mieu!! (plus d'erreurs dans le .h)
Par contre apparement il n'aime pas les déclarations de ce type:

Code :
  1. noeud n7;
  2. n7.val = 9;
  3. .......


 
le compilateur me dit:
abr.c: In function `main':
abr.c:152: parse error before `n7'
abr.c:153: `n7' undeclared (first use in this function)





 
tu déclares bien en début de bloc?


---------------
du bon usage de rand [C] / [C++]
n°231361
Tricky
En tapinant.
Posté le 20-10-2002 à 18:38:40  profilanswer
 

:D oupssss!!!
en effet c t pas au bonne endroit  :pt1cable:  
En tout cas merci à tous ceux ki on répondu :)
PROBLEME RESOLU :hello:

n°231362
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 18:39:35  profilanswer
 

cela dit ca dépend de ton compilateur. le C99 n'impose plus les déclarations de variables en début de bloc


---------------
du bon usage de rand [C] / [C++]
n°231364
Tricky
En tapinant.
Posté le 20-10-2002 à 18:43:54  profilanswer
 

Taz@PPC a écrit a écrit :

cela dit ca dépend de ton compilateur. le C99 n'impose plus les déclarations de variables en début de bloc




 
Mon compilateur c gcc 2.95.2 et apparement il supporte pas!

n°231369
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 18:46:40  profilanswer
 

plus ou moins, si tu compiles avec "-pedantic" en C (ou en C++) ca te donne des warnings a propos de l'ancienne norme C89/90
 
mais gcc 3.2 l'accepte parfaitement.
 
gcc 2.95 ne supprote pas ceci, mais d'autre aspects du C99 passent sans problèmes


---------------
du bon usage de rand [C] / [C++]
n°231600
Musaran
Cerveaulté
Posté le 21-10-2002 à 04:56:36  profilanswer
 

Juste pour dire qu'on a parfaitement le droit d'utiliser le même nom pour la structure et le typedef, en C comme en C++.

Code :
  1. typedef struct noeud{
  2. struct noeud* pere; par la struct car le typedef n'existe pas encore
  3. //blabla
  4. }noeud;
  5. struct noeud nd1; //par la struct
  6.        noeud nd2; //par le typede


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°231648
chrisbk
-
Posté le 21-10-2002 à 10:47:11  profilanswer
 

Harkonnen a écrit a écrit :

 
putain, c'était ça effectivement !!
moi aussi je me plaçais dans une optique C++ et j'ai pas percuté !  :fou:  




 
sclair, ca se perd vite ces bonnes vieilles habitudes du C :D

n°231650
chrisbk
-
Posté le 21-10-2002 à 10:48:05  profilanswer
 

Musaran a écrit a écrit :

Juste pour dire qu'on a parfaitement le droit d'utiliser le même nom pour la structure et le typedef, en C comme en C++.

Code :
  1. typedef struct noeud{
  2. struct noeud* pere; par la struct car le typedef n'existe pas encore
  3. //blabla
  4. }noeud;
  5. struct noeud nd1; //par la struct
  6.        noeud nd2; //par le typede






 
vi, ca je sais (je fais tjs comme ca), mais pourquoi diable y a t'il deux noms pour une struct ? (eg pourquoi la nommer en fin de def alors qu'elle est deja nommée en debut de def ?)

n°231675
BENB
100% Lux.
Posté le 21-10-2002 à 11:11:05  profilanswer
 

chrisbk a écrit a écrit :

 
 
vi, ca je sais (je fais tjs comme ca), mais pourquoi diable y a t'il deux noms pour une struct ? (eg pourquoi la nommer en fin de def alors qu'elle est deja nommée en debut de def ?)
 




 
Ces deux nom ne sont pas equivalents...
 

Code :
  1. struct toto{};


 
defini une srtucture toto, mais pour la referencer il faut faire struct toto, toto seul ne suffit pas (en C)
 
d'ou le  
 

Code :
  1. typedef struct toto titi;


 
qui defini titi utilisable sans le struct...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] probleme de structure

 

Sujets relatifs
Problème IE : décalage des images dans les tables[C] Problème de libération mémoire \Visual C++
Problème d'adaptation d'un div par rapport à un autre div en absolut Problème avec site hébergé en local...
[W3C] Problème de validationProbleme delicat
Probléme avec ma base de donnée !problème unix-windows (résolu)
[PHP]Problème avec fonction de recherche[JS] Probleme de window.open et window.close
Plus de sujets relatifs à : [C] probleme de structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR