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 :

Erreur: dereferencing pointer to incomplete type


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Erreur: dereferencing pointer to incomplete type
    Bonjour, je suis sur un problème depuis des heures et je n'arrive pas à le résoudre.

    Le problème est le suivant: j'essaye de compiler le programme mais il me dit à chaque fois

    Voice l'erreur:

    Nom : error.png
Affichages : 431
Taille : 14,5 Ko

    Voici le test.c (c'est le fichier main)

    Nom : main.png
Affichages : 494
Taille : 26,3 Ko

    Voici la fonction create

    Nom : create.png
Affichages : 552
Taille : 32,1 Ko

    Voici la structur PNM_T (renommé PNM avec un type opaque dans un .h)

    Nom : struct.png
Affichages : 440
Taille : 9,6 Ko

    Quelqu'un pourrait m'aider car je commence à désespéré ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Le message d'erreur initial me laisse perplexe : je vois bien qu'il manque quelques pixels à gauche de ta capture mais malgré tout, il semble que le type PNM soit également connu sous le nom de « struct NM_t » et pas « struct PNM_t ».

    Comme deux stuctures peuvent se faire mutuellement référence via les pointeurs et que, dans ce cas, il faut bien définir l'une avant l'autre, le compilateur peut te laisser déclarer un pointeur faisant référence à une structure pas encore définie.

    S'il y a une faute de frappe dans le *.h qui définit ton type opaque, il se peut que l'erreur reste latente jusqu'au moment où l'on en a réellement besoin.

  3. #3
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Le retour de la vengeance du code en captures d'écran..

    C'est une remarque de style, mais en général on utilise plutôt le suffixe _t pour le typedef (pour indiquer qu'il s'agit d'un type) et le radical pour le nom de l'enregistrement (qui a justement besoin du mot-clef struct pour être utilisé comme un type, ce qui lève d'office toute ambiguïté).

    Tu ne peux pas directement manipuler un type « opaque » (en créant une instance sur la pile, en utilisant sizeof, en faisant référence à ses champs, etc..) pour la simple raison que le compilateur a besoin de connaître sa définition complète - taille et position des champs - afin de réaliser ces opérations (d'où le message mentionnant incomplete type). Tout ce que tu peux faire avec une simple déclaration de struct, c'est manipuler des pointeurs vers ce type sans jamais les déréférencer.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses si rapide. J'ai repensé au problème sur base de vos réponses et je viens juste de trouver la solution. Il suffisait juste de créer des accesseurs pour accéder à mes variables de ma structure opaque. J'ai fait le test et cela fonctionne et je n'ai plus d'erreurs.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par BlackTwix Voir le message
    Merci pour vos réponses si rapide. J'ai repensé au problème sur base de vos réponses et je viens juste de trouver la solution. Il suffisait juste de créer des accesseurs pour accéder à mes variables de ma structure opaque. J'ai fait le test et cela fonctionne et je n'ai plus d'erreurs.
    Oui mais ce faisant, tu contournes le problème sans le résoudre et ce n'est pas une bonne chose en soi.
    Même si tu décides de choisir cette voie quand même, il faut absolument que tu comprennes à quoi est dû le bug qui t'a intéressé jusqu'ici. Qu'en est-il notamment de cette hypothétique faute de frappe ?

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ce n'est pas une faute de frappe, c'est juste que j'ai fait une mauvaise capture d'écran

  7. #7
    Membre expérimenté Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Points : 1 372
    Points
    1 372
    Par défaut ça fonctionne ?
    Au passage, l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%u\n", *image_cree->nbre_colonnes);
    ne peut donner autre chose qu'une erreur dans ton cas, même sans le problème de la structure opaque.

    Il faudrait plutôt écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%u\n", image_cree->nbre_colonnes);
    ou à la rigueur printf("%u\n", (*image_cree).nbre_colonnes); ou même printf("%u\n", image_cree[0].nbre_colonnes); ...

    Evidemment, après ta définition d'accesseurs, je suppose que cela n'a plus d'importance puisque ton instruction doit maintenant ressembler à quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%u\n", pnm_get_nbre_colonnes(image_cree));
    non ?

    Par ailleurs, je dis peut-être une ânerie, mais j'ai l'impression que tu veux faire de la POO en C, et si c'est le cas pourquoi ne pas t'orienter vers un langage proche mais plus adapté comme C++ ou Obj-C (c'est une vraie question pas une critique) ?

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. error: dereferencing pointer to incomplete type
    Par Amnael dans le forum Débuter
    Réponses: 15
    Dernier message: 16/03/2014, 23h26
  3. dereferencing pointer to incomplete type
    Par Almenor dans le forum Débuter
    Réponses: 10
    Dernier message: 31/05/2012, 10h17
  4. dereferencing pointer to incomplete type
    Par Anasiben dans le forum Débuter
    Réponses: 3
    Dernier message: 19/05/2011, 16h39
  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