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 :

Error LNK2005 lors de l'utilisation d'une classe


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut Error LNK2005 lors de l'utilisation d'une classe
    Bonjour à tous,

    Je me retrouve face à un problème qui me dépasse et qui est légèrement différent des autres erreurs de link2005 que j'ai trouvé en cherchant sur ce forum.

    Je suis en train de concevoir un petit importer SIG qui ne compile plus quand je veut utiliser une classe pressente dans un autre projet (ImporterManager).

    Si je compile mon projet ImporterSIG sans utiliser l'importerManager, je n'obtiens pas d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3>ImportGIS - 0 error(s), 0 warning(s)
    Si je rajoute l'importerManager, je me retrouve donc avec des erreurs LNK2005.

    Pseudo Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void GISImporter::Import(const std::string& fileName  )
    {
     
    ImporterManager testimport;
    }
    Erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >Compiling...
    1>GISImporter.cpp
    1>Linking...
    1>stk.lib(stk.dll) : error LNK2005: "public: unsigned int __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::size(void)const " (?size@?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QBEIXZ) already defined in GISImporter.obj
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??0?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@QAE@XZ) already defined in GISImporter.obj
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > const &)" (??0?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@QAE@ABV01@@Z) already defined in GISImporter.obj
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::~vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >(void)" (??1?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QAE@XZ) already defined in GISImporter.obj
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >(void)" (??0?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QAE@XZ) already defined in GISImporter.obj
    1>stk.lib(stk.dll) : error LNK2005: "public: void __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::push_back(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?push_back@?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z) already defined in GISImporter.obj
    Stk est un autre projet ou des outils de basses et la stl sont définis. Ce projet est normalement correct.

    Ce que je ne comprend pas, c'est comment je peut redéfinir des fonctions dans mon ImporterGIS :
    alors qu'il compile quand je n'utilise pas ImporterManager
    que la DLL contenant ImporterManager compile correctement

    Voila, je suis donc perdu.
    Si quelqu'un a réussi à comprendre mon problème et peut m'expliquer ce que je n'ai manifestement pas compris, je lui en serait très reconnaissant.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Bon, j'ai pris mon courage a deux mains et j'ai fait du menage dans les includes de ImporterManager.

    Du coup, je me retrouve toujours avec une erreur lnk2005 mais entre deux lib, ce qui correspond plus au probleme déjà évoqué sur ce forum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >(void)" (??0?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QAE@XZ) already defined in libevPtsToGrs.lib(creerGrs.obj)
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::~vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >(void)" (??1?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@QAE@XZ) already defined in libevPtsToGrs.lib(creerGrs.obj)
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??0?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@QAE@XZ) already defined in libevPtsToGrs.lib(creerGrs.obj)
    1>stk.lib(stk.dll) : error LNK2005: "public: __thiscall std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > const &)" (??0?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@QAE@ABV01@@Z) already defined in libevPtsToGrs.lib(creerGrs.obj)

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Ca sent le problème de config sur le link de la bibliothèque : tu aurais une liaison statique dans ta dll et tu relierais dans ton application vers les libs standard. Je ne sais pas comment c'est possible. Quelle version de visual utilises-tu ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    J'utilise visual Studio 2005.

    Dans ce projet j'utilise des lib externes. Dans le doutes, je les ai recompiler, mais sans changement.
    Du coup, je commence à ramener le code pour tenter de compiler sans les lib.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    C'est plus à regarder dans les options de link des différents projets. Comment sont liés les bibliothèques par défaut (statique ?)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Comment sont liés les bibliothèques par défaut (statique ?)
    Aucune idée. Je me rend compte que je n'y connait pas grand chose en bibliothèque.

    Pour ajouter une lib à mon projet, je vais dans l'option du projet->linker
    puis General->additional library directories
    et Input->Additional Dependencies

    Quel rôle joue la liaison entre les bibliothèque ? et où est ce que je peut voir si c'est en statique ou dynamique ?

    /* Edit */

    Je suis tombé sur cette conversion :
    http://www.developpez.net/forums/d42...ion-dynamique/

    c'est un peu plus clair.

    Donc les libs que j'ajoute sont bien des .lib. Par contre le projet qui ne compile pas est une .dll.
    Je ne sais pas si ça joue, mais je le précise.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Essaies ça aussi et ça

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2011, 12h30
  2. erreur lors de l'utilisation d'une datasource
    Par ceriise dans le forum Struts 1
    Réponses: 8
    Dernier message: 04/10/2007, 22h43
  3. Erreur de numérotation des images lors de l'utilisation d'une référence
    Par mobi38 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 9
    Dernier message: 03/09/2007, 16h36
  4. Bug lors de l'utilisation d'une fonction dans une macro.
    Par monf29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2007, 14h35
  5. [.NET 2.0] Erreur lors de l'utilisation d'une application .NET
    Par Jérôme Lambert dans le forum Framework .NET
    Réponses: 6
    Dernier message: 21/11/2006, 15h45

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