IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

dereferencing pointer to incomplete type


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Par défaut dereferencing pointer to incomplete type
    Bonjour,
    j'ai un projet à rendre qui utilise des listes doublement chainées qu'on enregistre dans des fichiers. lorsque j'essaie d'enregistrer la liste sur le fichier en utilisant la fonction fprintf, le compilateur me retourne une erreur : dereferencing pointer to incomplete type.
    Pouvez m'aider s'il vous plait, je ne suis pas arrivé à voir l'erreur
    Merci

    Voici un extrait de mon programme :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    typedef struct Location {
     
      int Duree;
      char Marque[100];
      char Model [100];
      char Categorie[100];  
      char Mode_paiement[100];
      char Num_cin[20];
      char Nom_pre[100];
      char Num_permis[20];
     
     
      struct Location *Precedent;
      struct Location *Suivant;
     
             } LOCATION;
     
     
    struct LOCATION *premier,*dernier;
     
    FILE *fichier_l;
     
    void sauvegarder_l(struct LOCATION *ptr){
     
         fichier_l=fopen("location.txt","w+");
         if(fichier_l != NULL){
            while( ptr!=NULL){
                      fprintf(fichier_l," %d %s %s %s %s %s %s %s\n",ptr->Duree,ptr->Marque,ptr->Model,ptr->categorie,ptr->Mode_paiement,ptr->Num_cin,ptr->Nom_prenom,ptr->Num_permis);
                      ptr=ptr->Suivant;
                      }
         fclose(fichier_l);
         }
    else
    {printf("Sauvegarde Impossible");
    fclose(fichier_l); }
         }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    si je ne me trompe pas, tu trouveras la cause de ton erreur en révisant la notion de typedef et les conséquences de son utilisation.

    Si tu ne veux pas jouer au chat et à la souris, voici le problème : tu utilises un type "struct LOCATION", mais celui-ci n'est défini nul part, car avec le typedef, c'est le type LOCATION que tu as créé.

  3. #3
    Membre averti Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Par défaut
    Je pense que feydaykyn à raison ... mais pour l'avoir déjà fait dans un de mes programmes je ne me souviens pas qu'il me retournais une erreur de déréférencement de pointeur ... mais plutôt un "previous declaration of LOCATION was here"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    LOCATION *premier,*dernier; /*Et non struct LOCATION */
    
    FILE *fichier_l;
    
    void sauvegarder_l( LOCATION *ptr){ /*Pareil*/
         
        ........
       
                      }
         fclose(fichier_l);
         }
    else
    .....
         }
    Si tu voulais appeler des "struct LOCATION",
    il fallait faire un :
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Location
    {
    ...
    ....}LOCATION;
    EDIT : Ah bah c'est bon à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct LOCATION
    {
    ...
    ....};

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Oui, feydaykyn a raison : ce qui est défini c'est struct Location et LOCATION mais pas struct LOCATION.
    Au moment de déréférencer le pointeur ptr, le compilateur a besoin de connaitre le type de *ptr et ce type n'est pas défini.

    @ royal380 Le code que tu présentes ne définit pas le type struct LOCATION mais une variable d'identificateur LOCATION et de type struct Location

Discussions similaires

  1. error: dereferencing pointer to incomplete type
    Par rufa11 dans le forum Réseau
    Réponses: 2
    Dernier message: 11/02/2015, 09h41
  2. Réponses: 7
    Dernier message: 07/04/2014, 23h40
  3. error: dereferencing pointer to incomplete type
    Par Amnael dans le forum Débuter
    Réponses: 15
    Dernier message: 16/03/2014, 23h26
  4. dereferencing pointer to incomplete type
    Par Almenor dans le forum Débuter
    Réponses: 10
    Dernier message: 31/05/2012, 10h17
  5. dereferencing pointer to incomplete type
    Par Newgaia dans le forum Débuter
    Réponses: 2
    Dernier message: 19/04/2009, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo