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 :

utilisation des ".h"


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut utilisation des ".h"
    Bonjour.

    Je lutte depuis 2 jours sur un problème avec mes ".h".
    Je crée différente structures, dans ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct
    {
    	int positionX;
    	int positionY;
    	int type;
    	int alive;
    } pig;
    puis je fait un fichier avec des fonctions qui utilisent ses structures.
    Comme ces fonctions peuvent être utiliser dans d'autre fichiers, je les met dans mon les heat associer.

    dans level.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "pig.h"
        ...
     
    pig * initPigTabLevel( level courantLevel)
    {
         ....
    }
    dans level.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pig * initPigTabLevel( level);
    et voila le type d'erreur que j'ai à la compilation ....
    level.h:18: error: parse error before '*' token
    level.h:18: warning: type defaults to 'int' in declaration of 'initPigTabLevel'
    level.h:18: warning: data definition has no type or storage class
    Comme je débute en C je fait peu être une erreure grossière ( ou pas) mais si quelqu'un peu me donner 2-3 tuyaux ça serai sympa...

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par munck
    Comme je débute en C je fait peu être une erreure grossière ( ou pas) mais si quelqu'un peu me donner 2-3 tuyaux ça serai sympa...
    Bah level.h ne connait pas la structure pig. Il faut inclure pig.h dans level.h.

    Du coup plus besoin de l'inclure dans le .c
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Euh bien j'ai deja testé et a chaque foi que je declare un élément de type "pig" (ou autre ) il y a une erreur ;
    error: 'pig' undeclared (first use in this function)

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par munck
    Euh bien j'ai deja testé et a chaque foi que je declare un élément de type "pig" (ou autre ) il y a une erreur ;
    error: 'pig' undeclared (first use in this function)
    Bon montre nous pig.h et ton fichier .c

    Au fait, en général on met une majuscule à la première lettre d'une structure.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct
    {
    	int positionX;
    	int positionY;
    	int type;
    	int alive;
    } pig;
    et Deux fichier .c important:

    calculate.c
    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
    #include "calculate.h"
    #include "level.h"
    #include "pile.h"
    #include "gpl.h"
    #include "pig.h"
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    void play(level courantLevel, gpl courantGpl, pig * pointeur, pile * pHolePile)
    {	
    ......
     
     
    }
    .....
    et level.c:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "level.h"
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    ...
     
    pig * initPigTabLevel( level courantLevel)
    {
    ....
    }...

    Remarque tout le code est disponible sur: http://munck06.free.fr/mesDoc/projetC/


    Mes dans tout les cas merci pour les réponces si rapides

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Mais dans level.h est-ce que tu as bien fais un #include "pig.h" ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bon y a du nouveaux. j'ai bien mi tout les "#include "xxxx.h" " dans les ".h" adéquat les est viré des ".c".

    les erreures sont alors:
    In file included from calculate.h:13,
    from calculate.c:10:
    pig.h:16: error: conflicting types for 'pig'
    pig.h:16: error: previous declaration of 'pig' was here

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par munck
    Bon y a du nouveaux. j'ai bien mi tout les "#include "xxxx.h" " dans les ".h" adéquat les est viré des ".c".

    les erreures sont alors:
    Tu n'as pas fait de protection contre les inclusions multiples

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef FICHIER_H_
    #define FICHIER_H_
     
    code du .h
     
    #endif /* guard */
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    pig.h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct
    {
    	int positionX;
    	int positionY;
    	int type;
    	int alive;
    } pig;
    debut de calculate.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include "calculate.h"   (ligne 10)
    #include <stdio.h>
    #include <stdlib.h>
    calculate.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "level.h"
    #include "pile.h"
    #include "gpl.h"
    #include "pig.h"
    et oui lors de mon dernier mesage il y avais bien #include "pig.h" dans level.c

  10. #10
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par munck
    et oui lors de mon dernier mesage il y avais bien #include "pig.h" dans level.c
    Je parle pas dans level.c mais dans level.h
    Car dans level.h tu déclares le protoype d'une fonction qui retourne un pointeur sur un pig. Hors si tu n'inclus pas pig.h le compilateur te dira qu'il ne connait pas le type pig.

    Rajoutes des guard contre les inclusions comme je te l'ai dis, dans chacun de tes .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef PIG_H_
    #define PIG_H_
     
    typedef struct
    {
    int positionX;
    int positionY;
    int type;
    int alive;
    } pig;
     
    #endif /* guard */
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Tu n'as pas fait de protection contre les inclusions multiples
    C'est vrai.
    maintenant c'est fait. On y est presque...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ gcc -ansi -Wall -o play calculate.c
    /usr/bin/ld: Undefined symbols:
    _Clear
    _Length
    _Pop
    _Push
    _initPigTabLevel
    _nbPig
    collect2: ld returned 1 exit status
    et toutes ces fonctions font partie de mon pile.c et level.c

  12. #12
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par munck
    C'est vrai.
    maintenant c'est fait. On y est presque...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ gcc -ansi -Wall -o play calculate.c
    /usr/bin/ld: Undefined symbols:
    _Clear
    _Length
    _Pop
    _Push
    _initPigTabLevel
    _nbPig
    collect2: ld returned 1 exit status
    et toutes ces fonctions font partie de mon pile.c et level.c
    Tu ne connais pas le principe de la compilation séparée ?
    Fais un Makefile.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Super ça marche....

    désoler mais je n'est pas tout les automatismes du C.
    je ne connaissais pas les guard contre les inclusions mais maintenant C bon.


    Merci beaucoup.

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

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