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 :

multiple definitions of var..


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par d�faut multiple definitions of var..
    Bonjour,
    Cela fait plus d'une heure que je bataille sur un probl�me, sans doute tr�s b�te: J'ai une variable dont j'ai besoin dans plusieurs fichiers diff�rents, et j'arrive soit � les inclure plusieurs fois (et le linker crie) , soit pas du tout (et donc le compilo crie)

    Bon, je vais essayer de simplifier au maximum la struture des fichiers concern�s; la liste des fichiers avec leurs includes et fonctions:

    main.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    #include "const.cpp"
    int main () { 
       fctn();
    }
    const.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    #include "call.h"
    unType mavar
    int fctn () {
       // utilisation de mavar
    }
    call.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    #include "call.h"
    int call::call_fctn () {
        // utilisation de mavar
    }
    call.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    namespace call {
       int call_fctn ();
    }
    Note: var est un objets d'une classe que je n'ai pas jug� utile de pr�senter ici.

    Le Makefile quant � lui pourrai se r�sumer �:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    gcc -c call.cpp
    gcc -lcall main.cpp -o exec.bin
    Mais non. Les r�sultats auquels j'arrive sont ( en bougeant mavar de fichier en fichier ) soit mavar n'a pas �t� d�clar� dans main.cpp, soit pas d�clar� dans call.cpp, soit au moment de lier, dans main.cpp: mavar a d�ja �t� d�clar� avant dans call.cpp

    une id�e ?

    J'espere ne pas avoir trop simplifi� le code et avoir fait disparaitre le probleme

  2. #2
    Expert confirm�

    Inscrit en
    Ao�t 2006
    Messages
    3 967
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2006
    Messages : 3 967
    Par d�faut
    Mei,

    1) On n'inclut pas de fichiers .cpp, revois la conception de tes fichiers

    2) Pour ton probl�me, regarde le mot-cl� extern

  3. #3
    Membre �clair� Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par d�faut
    Merci pour ta r�ponse.
    J'ai un peu galer�, mais les extern furent effectivement la solution.
    Et j'ai revu mes fichiers, parce que si tu me dit qu'inclure des .cpp c'est mal

  4. #4
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    Les fichiers cpp, contrairement aux fichiers h, sont des unit�s de compilation. Par d�faut, le compilateur a comme r�gle de toujours les compiler au maximum (nb : pour le cas de d�finition des membres d'un template, il ne compilera pas grand chose).

    Du coup, si tu inclus un cpp dans un autre, la m�thode membre Exemple::Exemple() sera compil�e par le premier cpp, puis par le second et le linker ne saura pas choisir.

    De m�me, si tu d�finis (et non pas juste d�clarer) une fonction dans un .h, tu vas avoir le m�me probl�me de multiple d�finition lors du link si ton .h est inclut par plus d'une unit� de compilation. Dans ce cas, il faut rendre ces fonctions inline.

+ 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