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 :

template et erreur de link


Sujet :

Langage C++

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut template et erreur de link
    Bonsoir,

    Dans une classe j'ai une fonction membre qui est déclarée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template <typename T> void saisie(T &);
    et définie comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename T> void maclasse::saisie(T &masaisie)
    {
    	cin >> masaisie;
    }
    Si je ne fais appel à ma fonction membre, il n'y a aucun problème de compilation ni de link.
    Par contre quand je fais un appel j'ai ce problème de link :
    • classe.obj : error LNK2001: unresolved external symbol "public: void __thiscall maclasse::saisie(char &)" (?saisie@maclasse@@QAEXAAD@Z)
      Debug/console.exe : fatal error LNK1120: 1 unresolved externals
      Error executing link.exe.


    et l'appel que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.saisie(parametre);
    Au départ je pensais que le problème pouvait venir du passage de paramètres par référence, mais je vois pas ce qui clocherait dans ce que j'ai écrit.. le template ?

    EDIT : Visual C++ sous Windows XP Pro ou 98

    merci d'avance

  2. #2
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Lors de l'appel tu n'a pas spécifié le paramètre template....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.saisie<char>(parametre); // par exemple
    EDIT: En fait, avec la plupart des compilos, il est inutile de préciser le paramètre template dans une telle situation.

    Si tu as toujours une erreur, vérifie que le code te ta fonction est dans le .h et non pas dans le .cpp (c'est à dire que la définiton est au même endroit que la déclaration, c'est-à-dire dans l'en-tête de ta classe).
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Ca me met toujours une erreur.

    • error C2062: type 'char' unexpected


    Pourquoi est ce que la définition devrait etre au meme endroit que la déclaration ? On peut le faire mais ce n'est en rien obligatoire à ma connaissance

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 71
    Points
    71
    Par défaut
    Peu de compilateur offre l'"export template".

  5. #5
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Citation Envoyé par Willand
    Ca me met toujours une erreur.

    • error C2062: type 'char' unexpected


    Pourquoi est ce que la définition devrait etre au meme endroit que la déclaration ? On peut le faire mais ce n'est en rien obligatoire à ma connaissance
    Si (sauf utilisation du mot clé export, effectivement peu supporté à l'heure actuelle)
    Voir la FAQ:
    http://c.developpez.com/faq/cpp/?pag...VERS_templates
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 71
    Points
    71
    Par défaut
    Pour ma part, je fais un #include<moncodetemplate.cpp> avant chaque utilisation.

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    merci mais toujours est il que j'ai toujours
    • error C2062: type 'char' unexpected

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    "normal"
    Si je ne fais appel à ma fonction membre, il n'y a aucun problème de compilation ni de link.
    Par contre quand je fais un appel j'ai ce problème de link :

    classe.obj : error LNK2001: unresolved external symbol "public: void __thiscall maclasse::saisie(char &)" (?saisie@maclasse@@QAEXAAD@Z)
    Debug/console.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    Quand tu places le code dans Visual, si celui ci n'est pas utilisé il passe globalement à côté.

    Donc c'est pour cela que la première fois il passe sans message d'erreur...

    Essaye sous Dev C++ cela devrait passer !

    Visual C++ et les fonctions templates

    J'ai déjà eu le même problème sur une déclaration du code. Cela ne lie pas sous Visual C++ et cela fonctionne bien sous Dev Cpp...

    J'ai Visual C++ 6 et le dernier SP, mais rien n'y fait

  9. #9
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par Ti-R
    Quand tu places le code dans Visual, si celui ci n'est pas utilisé il passe globalement à côté.

    Donc c'est pour cela que la première fois il passe sans message d'erreur...

    Essaye sous Dev C++ cela devrait passer !

    Visual C++ et les fonctions templates

    J'ai déjà eu le même problème sur une déclaration du code. Cela ne lie pas sous Visual C++ et cela fonctionne bien sous Dev Cpp...

    J'ai Visual C++ 6 et le dernier SP, mais rien n'y fait
    Le problème c'est que je n'ai pas le choix de l'EDI

  10. #10
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Il faut que tu trouves une solution "moins belle" je vois pas comment le faire sinon...

    Au cas où... tu as essayé de déclarer le tout dans ton header en inline...

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Heureusement pour toi, ici tu n'as pas besoin de ce <char>, bicoze la détection automatique du type du paramètre.

    http://c.developpez.com/faq/cpp/?pag...TES_parametres

  12. #12
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Plus de warnings ni d'erreurs. Merci à tous !

  13. #13
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut
    résolu de quelle manière ?

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

Discussions similaires

  1. template dans header mais erreur au link
    Par ctxnop dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2013, 15h20
  2. Template et erreur de Link
    Par ZeNoob dans le forum C++
    Réponses: 10
    Dernier message: 12/10/2012, 00h25
  3. Erreur de link avec les templates
    Par suiss007 dans le forum C++
    Réponses: 6
    Dernier message: 04/01/2007, 11h09
  4. Réponses: 15
    Dernier message: 21/08/2006, 01h41
  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