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

Langage C++ Discussion :

Erreur de link


Sujet :

Langage C++

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 129
    Points
    129
    Par défaut Erreur de link
    Bonjour à tous!

    Bon, c'est probablement tout bête mais enfin... Je bataille depuis un moment sans trouver de solutions.
    Pour résumer le contexte : J'ai une appli C++/CLI. J'ai donc une partie en .Net (mais, ça peu importe) et une partie en C++ "classique".

    Cette dernière partie était constitué jusqu'à maintenant d'une simple classe ( .h et .cpp). Pour que ce soit moins brouillon, j'ai voulu créer une nouvelle classe dans laquelle j'ai déplacée des fonctions de la première. Je souhaiterai que cette deuxième classe contienne des fonctions qu'on puisse appeler sans avoir à instancier un objet de cette classe (des fonctions membres static sauf erreur).

    Bref, ça ressemble à ça :

    Classe1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef CLASSE1_H
    #define CLASSE1_H
     
    class Classe1 
    {
    public:
        Classe1                               ();
        virtual ~Classe1                    ();
     
    };
     
    #endif //CLASSE1_H
    Classe1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "stdafx.h"
    #include "Classe1.h"
    #include "Classe2.h"
     
    Classe1::Classe1 ()
    {
    Classe2::TraitementQuelconque();
    }
     
    Classe1::~Classe1 ()
    {
     
    }
    Classe2.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifndef CLASSE2_H
    #define CLASSE2_H
     
    class Classe2
    {
    public:
        static void TraitemantQuelconque ( );
    };
     
    #endif //CLASSE2_H
    Classe1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "stdafx.h"
    #include "Classe2.h"
     
    Classe2::TraitementQuelconque ( )
    {
    //....
    }
    C'est en gros la structure du truc.

    Seulement à la compilation, ce truc me donne des erreur de link du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Erreur	2	error LNK2028: jeton non résolu (0A000DF1) "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Classe2::TraitementQuelconque<char *>(char * const &)" (??$TraitementQuelconque@PAD@Classe2@@$$FSA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABQAD@Z) référencé dans la fonction "private: void __thiscall Classe1::Classe1" (?Classe1@Classe1@@$$FAAEXPAUIXMLDOMNode@@@Z)	Classe1.obj	Appli1
     
    Erreur	9	error LNK2019: symbole externe non résolu "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Classe2::TraitementQuelconque<char const *>(char const * const &)" (??$TraitementQuelconque@PBD@Classe2@@$$FSA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABQBD@Z) référencé dans la fonction __catch$?ValidateFile@Classe1@@$$FAAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z$0	Classe1.obj	Appli1
    Dans mon code, la fonction en question (appelée ici TraitementQuelconque) est une fonction template. Je sais pas si ça peut avoir un rapport...

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Points : 46
    Points
    46
    Par défaut
    Dans ton exemple il y a une faute de frappe :
    TraitementQuelconque
    TraitemantQuelconque

    Si ça peut aider...

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 129
    Points
    129
    Par défaut
    Faute de frappe en effet

    Mais aucun lien avec le problème, les classes étant juste une illustration.

    Autre élément en revanche, j'ai testé en supprimant la classe2 et en en faisant qu'un fichier de fonctions sans appartenance particulière. Et là j'ai les mêmes erreurs... Du coup je vois vraiment pas d'où ça peut venir...

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par caradhras Voir le message
    Dans mon code, la fonction en question (appelée ici TraitementQuelconque) est une fonction template. Je sais pas si ça peut avoir un rapport...
    Ben en fait si... ça semble avoir plus qu'un rapport...
    => http://cpp.developpez.com/faq/cpp/in...VERS_templates

    [EDIT] Je teste avant de passer le sujet en résolu

  5. #5
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Oui, ça vient probablement de là.
    Je ne me souviens plus des raisons exactes, mais pour éviter les erreurs de link j'applique systématiquement la disposition suivante :

    Fonction template ou inline -> déclaration + définition dans le .h
    Fonction autre -> déclaration dans le .h + définition dans le .cpp

Discussions similaires

  1. erreur de link
    Par meli0207 dans le forum MFC
    Réponses: 6
    Dernier message: 04/05/2007, 10h17
  2. template et erreur de link
    Par Willand dans le forum Langage
    Réponses: 12
    Dernier message: 05/12/2006, 21h19
  3. erreur de link(age) g++
    Par corwin dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/05/2004, 11h33
  4. [wxWindows] Erreur de link pour ODBC
    Par ovh dans le forum wxWidgets
    Réponses: 3
    Dernier message: 28/01/2004, 15h38
  5. DirectDrawCreate erreur de link
    Par Ing_Ben dans le forum DirectX
    Réponses: 1
    Dernier message: 01/12/2002, 18h46

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