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 :

problème pointeur sur structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut problème pointeur sur structure
    Bonjour tout le monde

    J'ai un problème de pointeur au sein d'une structure et je ne comprend pas l'erreur, un peu d'aide serait la bienvenue...
    Merci

    mon .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef struct Case *Case;
    mon .c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct Case{
    	int RangCol;			
    	int NumLigne;			
    	Case CaseSuivante;		
    	void *Contenu;			
    };
    l
    enfin mon main avec l'erreur: error: dereferencing pointer to incomplete type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Case c;
    /* appel d une fonction allouant la case c */
    /*erreur au moment de recuperer le contenu de ces deux champs */
    printf("Affichage de la case:\n");
    	printf("Case(%d,%d)",c->NumLigne,c->RangCol);
    J utilise gcc comme compilo

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    lis le cours ou les tuto sur les structures et comment accèder aux champs..

  3. #3
    Membre averti
    Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    J'ai regardé mais ma structure Case étant une structure Case* je ne comprend pas pourquoi je n'y ai pas accès alors que je le fais de la même manière dans une autre fonction et qu'aucune erreur n'est signalée

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'abord ce serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct PtrCase{
    	int RangCol;			
    	int NumLigne;			
    	Case CaseSuivante;		
    	void *Contenu;			
    } Case ;
    ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Case c;
    /* appel d une fonction allouant la case c */
    /*erreur au moment de recuperer le contenu de ces deux champs */
    printf("Affichage de la case:\n");
    	printf("Case(%d,%d)",c.NumLigne,c.RangCol);
    et sinon si tu passes dans une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MaFonction ( Case *c )
    {
    printf("Affichage de la case:\n");
    	printf("Case(%d,%d)",c->NumLigne,c->RangCol);
    }

  5. #5
    Membre averti
    Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    J'ai modifié ma structure comme suit, elle me sert a construire une liste chainée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct ptrCase{
    	int RangCol;			
    	int NumLigne;			
    	Case *CaseSuivante;		
    	void *Contenu;			
    }Case;
    J'utilise la fonction suivante pour l'allocation mémoire, aucun problème de compilation ni d'éxécution
    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
     
    Case* CaseAllouer(int lig,int col, void *formule)
    {
    	Case *c,*tmp;
    	tmp->Contenu=formule;
    	tmp->RangCol=col;
    	tmp->NumLigne=lig;
    	tmp->CaseSuivante=NULL;
     
    	if ((c=malloc(sizeof(tmp)))==NULL)
    	{
    		fprintf(stderr,"Erreur de la creation de case\n");
    		return NULL;
    	}
    	else
    	{
    		*c=*tmp; 
    		return c;
    	}
    }
    Voici le code complet de mon main que je viens de modifier, je suis debutant sur le forum et ai du mal expliqué mon probleme, l'erreur est toujours au même endroit lorsque je cherche à accéder au contenu
    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
     
    int main()
    {
    	Case *c;
    	int coord[2],i;
    	int contenu;
    	printf("Test de l allocation d une case\n");
    	printf("Entrez les coordonnees de la case:   ");
    	for(i=0;i<2;i++) scanf("%d",coord+i);
    	printf("\nEntrez l entier que vous voulez inserer comme contenu");
    	scanf("%d",&contenu);
    	printf("c parti pour caseallouer\n");
    	c=CaseAllouer(coord[0],coord[1],&contenu);
    	printf("\nFin de la creation de la case\n");
    	printf("Affichage de la case:\n");
    	printf("Case(%d,%d)",c->NumLigne,c->RangCol);
    	exit(0);
    }
    Lorsque je compile toutes mes fonctions dans un seul et même fichier il n'y a aucun problème, je n'arrive pas à comprendre pourquoi ça na marche pas en compilation séparée

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lejohn
    Lorsque je compile toutes mes fonctions dans un seul et même fichier il n'y a aucun problème, je n'arrive pas à comprendre pourquoi ça na marche pas en compilation séparée
    Mets tout tes fichiers en pièce jointes. Il doit y avoir un bug dans les headers...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pointeur sur structures
    Par Seimaya dans le forum Débuter
    Réponses: 33
    Dernier message: 26/08/2007, 18h13
  2. Réponses: 6
    Dernier message: 07/07/2007, 18h12
  3. pointeur sur structure
    Par julien.63 dans le forum C
    Réponses: 7
    Dernier message: 04/06/2007, 17h50
  4. Réponses: 2
    Dernier message: 21/03/2007, 10h55
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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