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 :

structure global : multiple definition


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Points : 47
    Points
    47
    Par défaut structure global : multiple definition
    Voila j'ai une structure global dans un .h

    Ma structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct          s_param
    {
      char                  *name;
      unsigned int          nbArg;
      unsigned long int     syscall;
      unsigned int          typeRetour;
      int                   firstArg;
      int                   secondArg;
      int                   thirdArg;
      int                   fourthArg;
      int                   fifthArg;
      int                   sixthArg;
    }                       t_param;
    et que je declare ma global juste en dessous dans mon .h.
    Je vous ai mis juste deux ligne car les 300 lignes de syscall serait un peu horrible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    # define        INT     10
    # define        UINT    11
    # define        STR     12
    # define        PTR     13
     
    const t_param         g_param[300] =
      {
        {"read", 3, 0, INT, INT, PTR, UINT, 0, 0, 0},
        {"write\t", 3, 1, INT, INT, STR, UINT, 0 ,0 ,0}
      };
    Donc cette global est uniquement en lecture. En incluant le .h que dans un seul .c sa marche et c'est fonctionnel.
    Malheureusement pour eviter de rendre un peu le fichier trop sal, j'ai eu envie de partager mes fonctions dans plusieurs .c
    Mais cette erreur apparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    get_reg.o:(.rodata+0x20): multiple definition of `g_param'
    main.o:(.rodata+0x20): first defined here
    collect2: ld returned 1 exit status
    make: *** [test] Error 1
    Cette global est pour le moment utilise uniquement dans deux .c (c'est pour sa que l'erreur n'est que dans deux .c).
    Donc voila si vous avez une idee ou deux ce serait cool car la je bloque.

    Ps : j'ai essaye de la declare en extern la global mais ne marche pas et me fait la meme erreur avec des warnings en plus.

    Cordialement

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    const est bien du C? Ce n'est pas du C++ plutôt?


    Sinon est-ce que tu as mis dans ton .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef MON_H
    #define MON_H
     
    //tout ton .h
     
    #endif
    Sinon il ne faut pas faire des #include de fichier .c

  3. #3
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Comme tu t'en es rendu compte, on ne doit pas définir de variables dans un .h

    La variable doit être définie (et initialisée ici) dans un des .c et déclarée avec exactement le même type en extern dans le .h

    @Neckara
    const est bien du C? Ce n'est pas du C++ plutôt?
    c'est aussi du C
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par diogene Voir le message
    Comme tu t'en es rendu compte, on ne doit pas définir de variables dans un .h

    La variable doit être définie (et initialisée ici) dans un des .c et déclarée avec exactement le même type en extern dans le .h
    Merci beaucoup j'avais essayer comme tu viens de dire mais en remetant pas le type pour initialiser la globale et j'avais meme essayer de l'initialiser dans tout les .c (la catastrophe).
    Merci beaucoup
    Je met le sujet en resolu

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/09/2006, 15h42
  2. Multiple definition
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 11/05/2006, 19h21
  3. multiple definition of operator<<...
    Par kleenex dans le forum C++
    Réponses: 3
    Dernier message: 05/05/2006, 02h56
  4. [LG]Interfaces et multiples définitions
    Par fatt dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2004, 22h41
  5. multiple definition
    Par scorbo dans le forum C
    Réponses: 5
    Dernier message: 10/09/2003, 13h16

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