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 :

Erreur Linker redéfinition de symbole LNK2005


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Points : 25
    Points
    25
    Par défaut Erreur Linker redéfinition de symbole LNK2005
    Bonjour à tous, je suis confronté à un soucis de Linker que j'ai un peu de mal à comprendre. Je m'explique, je suis sous visualstudio2010, mon projet contient un fichier "define.h" que j'inclus dans plusieurs autres headers. Define.h contient (notamment) :

    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
     
    #ifndef __DEFINES
    #define __DEFINES
     
    [...]
     
    #define _DEBUG
     
    void DEBUG_LOG(char* format, ...)
    {
    #ifdef _DEBUG && __DEBUG
    	std::string str(format);
    	str+="\n";
    	va_list args;
    	va_start(args,format);
    	vprintf(str.c_str(), args);
    #endif
    }
     
    #endif
    Or, à la compilation, je suis gratifié du message error LNK2005: "void __cdecl DEBUG_LOG(char *,...)" (?DEBUG_LOG@@YAXPADZZ) déjà défini(e) dans Camera.obj. Ce que je ne comprends pas, c'est que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef __DEFINES
    #define __DEFINES
    devrait normalement éviter ce problème de définition multiple, ce qui ne semble pas être le cas. Auriez vous des idées sur ce qui provoque cela ? N'hésitez pas à me demander plus de précisions si nécessaire.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    les guard include empêchent un fichier d'être inclus dans une même unité de compilation.
    Btw, on évite de mettre __ en préfixe, qui est normalement réservé.

    Ton fichier est bien include une seule fois, mais il contient le corps/implémentation de la méthode. C'est autorisé uniquement pour les fonctions inline dans un header. Sinon il y a multiple definition.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Merci, problème résolu, et j'ai appris quelque chose

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu n'es pas censé définir _DEBUG toi-même dans un fichier, pour la même raison. Si tu tiens à le définir, définis-le dans les options du projet (mais en mode Debug, Visual le fait déjà).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    En fait j'utilise deux defines debug, le premier à travers le mode debug de visual, le second pour me permettre d'activer ou non les sorties toujours en restant en debug dans visual. Mais je prends bonnes notes de vos remarques et apporterai des modifications.

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

Discussions similaires

  1. Message d'erreur 'can not find symbol'
    Par Clotilde dans le forum Langage
    Réponses: 6
    Dernier message: 30/04/2009, 17h14
  2. Réponses: 2
    Dernier message: 21/04/2007, 10h59
  3. Réponses: 2
    Dernier message: 13/02/2007, 16h01
  4. Réponses: 5
    Dernier message: 15/01/2007, 21h15
  5. Réponses: 3
    Dernier message: 12/04/2006, 18h32

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