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 :

Probleme d'instantiation d'un template defini dans une Dll


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Probleme d'instantiation d'un template defini dans une Dll
    Bonjour,

    J'ai une classe template definie dans une Dll (C++) comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template <class T> class MyList;
    J'aimerais l'utiliser dans une librairie C++. Cette Dll et la librairie seront ensuite utilisées dans une appli C++ (compilée en Visual 6)

    Je tente d'instantier ce template dans la librairie comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template class MyList<CPolygon>;
    J'ai inclu les header pour MyList et Cpolygon.

    J'ai les warnings suivant:

    warning C4661: '__thiscall MyList<class CPolygon>::MyList<class CPolygon>(const class MyList<class CPolygon> &)' : no suitable definition provided for explicit template instantiation request
    ..\LabelPosition/MyList.h(61) : see declaration of 'MyList<class CPolygon>::CKList<class CPolygon>'

    et dans MyList.h(61) j'ai un constructeur par copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          MyList(const MyList< T > &right);
    Ceci pour toutes les methodes de MyList faisant reference a T.

    Dans l'appli finale C++ utilisant la Dll et la lib, j'ai des erreurs au link.

    LabelPosition.lib(CPolygonCreator.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall MyList<class CPolygon>::~MyList<class CPolygon>(void)" (??1?$MyList@VCPolygon@@@@UAE@XZ)

    Quelqu'un aurait-il une idee?
    Merci par avance!

    Regeaisse.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    J'ai déplacé vers le forum C++.
    Un template ne peut pas être définit dans une dll, car un template, ça ne peut pas se compiler. C'est un patron, un modèle de code, qui manipule des types abstraits. Ce qui peut être exporté par une dll, c'est une instanciation d'un template pour un type donné. Voir le sujet sur le warning C4251 traité ici il y a peu.
    Bref, tout ça pour dire que ton template, il s'utilise sous forme de fichier code uniquement. Tout le code du template doit être livré dans le fichier, a mois que certaines parties non génériques soient contenues dans une dll, mais c'est une autre histoire.
    Ton template ne peut pas être découpé en .h et .cpp.
    http://c.developpez.com/faq/cpp/?pag...VERS_templates

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Je ne savais pas qu'on ne pouvait exporter qu'une instanciation d'un template.
    J'ai donc rappatrie le code du template dans ma lib.
    Merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2007, 21h52
  2. n'affiche pas une image arriere plan definis dans une CSS
    Par mikebranque dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 30/06/2006, 15h54
  3. Réponses: 1
    Dernier message: 18/04/2006, 12h24
  4. [Language] Explications classe définie dans une classe
    Par etiennegaloup dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2005, 22h15
  5. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36

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