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

  FORUM HardWare.fr
  Programmation
  C

  pb avec typedef

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb avec typedef

n°1116359
theredled
● REC
Posté le 10-06-2005 à 23:42:02  profilanswer
 

Hi
 
Voila, avec avoir lu et compilé des exemples sur les listes chainées qui marchent à merveille, j'ai décidé pour voir si j'avait compris, de tout refaire moi-même sans regarder les exemples. J'ai réussi sauf une chose : typedef.
 
J'avais au départ fait tout le programme en utilisant la dénomination "struct eltliste" pour le type, ça marchait, j'ai rajouté typedef pour moins de prise de tête, et là pb.
 
En effet voila la déclaration :

Code :
  1. typedef struct
  2. {
  3. struct eltliste *suiv;
  4. struct eltliste *prec;
  5.         int valeur;
  6. } eltliste;
  7. eltliste  *FirstElt = NULL, *LastElt = NULL;


 
Et voilà là ou bloque le compilateur (GCC - DevCpp)

Code :
  1. int Ajoute(eltliste **fLastElt, int valeur)
  2. {
  3. eltliste temp;
  4. temp = **fLastElt;
  5. temp.suiv = malloc(sizeof(eltliste));
  6. if (temp.suiv==NULL) return -1;
  7. temp.suiv->prec = *fLastElt;   // <----------------- ici
  8. temp.suiv->suiv = NULL;
  9. temp.suiv->valeur = valeur;
  10. **fLastElt = temp;
  11. *fLastElt = (*fLastElt)->suiv;
  12. }


[ certes ne n'est pas très bien codé, un peu trop compliqué pour rien ]
 
Il me dit : "dereferencing pointer to incomplete type".
Je rappelle que je n'ai rien changé sauf la dénomination de la structure (de "struct eltliste" à "eltliste" ).
Les champ prec et suiv étant eux par contre déclarés de type "struct eltliste", on peut penser que l'incompatibilité vient de là. Or les exemples que j'avais trouvé, j'ai vérifié marchait exactement pareil, le compilateur considérait donc que "struct eltliste" = "eltliste".
 
Où est la subtilité ?

mood
Publicité
Posté le 10-06-2005 à 23:42:02  profilanswer
 

n°1116363
theredled
● REC
Posté le 10-06-2005 à 23:44:39  profilanswer
 

Voila le code des exemples que j'avais trouvé :
 

Code :
  1. typedef struct pile
  2. {
  3.         int valeur;
  4.         struct pile *prec;
  5. } pile ;


 
la fonction "Ajouter" :

Code :
  1. void Push(pile **p, int Val)
  2. {
  3.         pile *element = malloc(sizeof(pile)); 
  4.         if(!element) return
  5.         element->valeur = Val;   
  6.         element->prec = *p;      <--------- prec = "struct pile", p = "pile"
  7.         *p = element;
  8. }


Là, ça marche !
 
 :heink:


Message édité par theredled le 10-06-2005 à 23:46:40
n°1116391
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2005 à 23:59:33  profilanswer
 

theredled a écrit :


on :

typedef struct  
{
 struct eltliste *suiv;
 struct eltliste *prec;
        int valeur;
} eltliste;



Marche pas. 'struct eltliste' n'est pas défini.
 
Une solution :  


typedef struct eltliste
{
   struct eltliste *suiv;
   struct eltliste *prec;
   int valeur;
}  
eltliste;



Message édité par Emmanuel Delahaye le 11-06-2005 à 00:00:37

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1116400
Taz
bisounours-codeur
Posté le 11-06-2005 à 00:05:12  profilanswer
 

c'est quoi ces manie de mettre de maj au variables mais pas au type ? c'est pourtant pas compliqué. Homme / un homme. C'est une histoire de nom / nom commun.

n°1116401
theredled
● REC
Posté le 11-06-2005 à 00:05:17  profilanswer
 

:bounce: Oh :bounce:  
 
Lumière que tu es.
 

Citation :

Marche pas. 'struct eltliste' n'est pas défini.


Tu veux dire qu'il n'est pas défini pour *suiv et *prec j'imagine? Il est défini après quand même ?

n°1116402
Taz
bisounours-codeur
Posté le 11-06-2005 à 00:06:02  profilanswer
 

après l'heure, c'est plus l'heure

n°1116406
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-06-2005 à 00:09:35  profilanswer
 

theredled a écrit :

Citation :

Marche pas. 'struct eltliste' n'est pas défini.


Tu veux dire qu'il n'est pas défini pour *suiv et *prec j'imagine? Il est défini après quand même ?


Ben non. Il est jamais défini.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1116407
theredled
● REC
Posté le 11-06-2005 à 00:10:08  profilanswer
 

Tout à fait Taz (pr tes 2 msg, quoique j'ai pas compris le 2e [EDIT : en fait si je crois]).
 
Pas con le truc homme Homme. On peut même expliquer HOMME = mr DUTROU = une personne définie = constante.
 
En fait c'est juste que la variable je l'utilise plus souvent donc je lui met un nom plus comprehensible quoi. Mais un homme, l'Homme quoi c'est vrai merde...


Message édité par theredled le 11-06-2005 à 00:17:40
n°1116409
theredled
● REC
Posté le 11-06-2005 à 00:13:46  profilanswer
 

Emmanuel Delahaye a écrit :

Ben non. Il est jamais défini.


 
?
 
Source http://www.linux-kheops.com/doc/ansi-c/
 

Citation :

Si on déclare :  
 
typedef struct
   {
   ...
   } PERSONNE;
 
les déclarations de variables se feront par :  
 
PERSONNE p1,p2;


 
Apparemment chez lui ça marche pourtant. Et le compil n'a pas crié pour "eltlist *FirstEl".  :??:


Message édité par theredled le 11-06-2005 à 00:15:03
n°1116413
Taz
bisounours-codeur
Posté le 11-06-2005 à 00:16:14  profilanswer
 

vraiment ça me tue toutes ces économies de bout de chandelles pour au final passer sa soirée devant des problèmes qui n'existe pas.
 
Fais en 2 fois. On voit très communément :

Code :
  1. typedef struct _Foo Foo;
  2. struct _Foo
  3. {
  4. };

mood
Publicité
Posté le 11-06-2005 à 00:16:14  profilanswer
 

n°1116417
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-06-2005 à 00:17:42  profilanswer
 

theredled a écrit :


Citation :

Si on déclare :  
 
typedef struct
   {
   ...
   } PERSONNE;
 
les déclarations de variables se feront par :  
 
PERSONNE p1,p2;
 
on voit que la seconde méthode permet d'éviter d'avoir à répéter struct.


 
Apparemment chez lui ça marche pourtant. Et le compil n'a pas crié pour "eltlist *FirstEl".  :??:


 
Je répète " struct eltliste n'est jamais défini". Je ne te parle pas de 'eltliste' qui est défini par le typedef et qui pourrait s'appeler tartemolle...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1116431
theredled
● REC
Posté le 11-06-2005 à 00:43:18  profilanswer
 

ok
 
merci !


Message édité par theredled le 11-06-2005 à 00:43:47

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

  pb avec typedef

 

Sujets relatifs
[c++] classe et typedefaffichage d'un typedef enum
mot clé typename dans un typedef ?Typedef ->problème de compréhension
[C++] pb de typedef et struc/vector (rézolu)[C, C++] typedef j'ai pas tout compris
typedef enum kesako?typedef dans un fichier idl (com) sous vc++
[C] "Improper use of a typedef symbol"[C/C++]besoin d'aide pour les struct typedef struct etc....
Plus de sujets relatifs à : pb avec typedef


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