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 :

Définition multiple


Sujet :

C

  1. #1
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut Définition multiple
    Bonjour les gars ^^
    J'ai un petit problème, le compilo me signale une définition multiple je crois que j'ai mal inclus mes fichiers mais ca m'a l'air correcte, tenez regardez:
    dans main.c j'ai: include "module.h"
    dans functions.c j'ai aussi include "module.h"
    et dans le module.h:
    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
     
    #ifndef H_MODULE
    #define H_MODULE
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "functions.h"
     
    #define DONE              0
    #define MAX_CHAR        255
     
    typedef struct {
     
            unsigned char   car;
            int           occur;
        }CHAR;
     
    unsigned char Set_Bit[8] = {128, 64, 32, 16, 8, 4, 2, 1};
    CHAR          CharTable [MAX_CHAR];
     
    #endif
    dans le functions.h au cas ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef H_FUNCTIONS
    #define H_FUNCTIONS
     
    /*prototypes de mes fonctions*/
     
    #endif
    et le compilo me rend:
    Citation Envoyé par code::blocks
    .objs\functions.o:functions.c.data+0x0): multiple definition of `Set_Bit'
    .objs\main.o:main.c.data+0x0): first defined here
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)
    0 errors, 0 warnings
    Merci d'avance
    Compil your life guy!
    The Aures Project

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Voir le site d'Emmanuel Delahaye: http://emmanuel-delahaye.developpez....s.htm#globales

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    En générale on initialise pas les variables, tableaux, .... dans les headers, peut-être que l'erreur viens de là (j'ai deja eu le problème) !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par CSoldier
    En générale on initialise pas les variables, tableaux, .... dans les headers, peut-être que l'erreur viens de là (j'ai deja eu le problème) !
    L'erreur vient de là. On déclare les variables/tableaux en extern dans les .h, et on définit les variables/tableaux dans une fonction d'init par exemple.

    De toute façon, attention, ces variables/tableaux sont alors des variables globales, à manipuler avec précaution.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Merci beaucoup, problème résolu (comme d'hab :p)
    Merci merci ^-^
    Compil your life guy!
    The Aures Project

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Déinition multiple
    Citation Envoyé par Goundy
    dans main.c j'ai: include "module.h"
    dans functions.c j'ai aussi include "module.h"
    et dans le module.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef H_MODULE
    #define H_MODULE
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "functions.h"
    Erreur de conception : Ces 4 headers ne sont pas utilisés ici. A retirer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #define DONE              0
    #define MAX_CHAR        255
     
    typedef struct {
     
            unsigned char   car;
            int           occur;
        }CHAR;
     
    unsigned char Set_Bit[8] = {128, 64, 32, 16, 8, 4, 2, 1};
    CHAR          CharTable [MAX_CHAR];
    Erreur de conception : On ne met pas de définitions d'objet dans un header.
    dans le functions.h au cas ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef H_FUNCTIONS
    #define H_FUNCTIONS
     
    /*prototypes de mes fonctions*/
     
    #endif
    et le compilo me rend:
    Citation Envoyé par code::blocks
    .objs\functions.o:functions.c.data+0x0): multiple definition of `Set_Bit'
    .objs\main.o:main.c.data+0x0): first defined here
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)
    0 errors, 0 warnings
    Ben oui. Si tu tiens à avoir des variables globales (qui ferait ça...) il faut suivre les regles de conception...

    http://emmanuel-delahaye.developpez....s.htm#globales
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par CSoldier
    En générale on initialise pas les variables, tableaux, .... dans les headers, peut-être que l'erreur viens de là (j'ai deja eu le problème) !
    Qu'on initialise ou non n'est pas la question. On ne définit pas d'objet dans un header. C'est tout.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Merci Emm, c'est noté
    Compil your life guy!
    The Aures Project

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

Discussions similaires

  1. Pb compilation: définitions multiples
    Par vincho dans le forum C
    Réponses: 7
    Dernier message: 19/07/2006, 21h29
  2. probleme de définition multiple
    Par gdpasmini dans le forum C
    Réponses: 40
    Dernier message: 05/07/2006, 13h57
  3. définition multiple
    Par elekis dans le forum C++
    Réponses: 3
    Dernier message: 01/03/2006, 16h32
  4. [g++] Définitions multiples
    Par GLDavid dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 12/12/2005, 16h04
  5. Réponses: 22
    Dernier message: 05/07/2005, 00h04

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