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 :

[Débutant]Classe template à inclure, problème de link


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut [Débutant]Classe template à inclure, problème de link
    Bonjour à tous.

    A force de développer toujours plus en c++, mon intérêt et ma curiosité ne cessent de grandir. J'ai récemment eu envie de m'essayer aux templates. J'ai consulté la faq, des cours et je (pense) comprendre leur fonctionnement.

    Avant d'essayer des choses plus complexes (j'aimerais créer une classe template qui représente un tableau), je commence par du code super bateau, mais qui arrive à ne pas fonctionner

    Ci-après le code.
    Note : je développe sous VS2005

    Fichier kArray.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef __kArray_h
    #define __kArray_h
     
    template <typename T>
    class kArray
    {
        public :
            kArray(void);
    };
     
    #endif // __kArray_h
    Fichier kArray.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "kArray.h"
     
    template <typename T>
    kArray<T>::kArray(void)
    {
    }
    Fichier sandboxTemplate.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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #pragma warning( disable : 4311 )
    #pragma warning( disable : 4312 )
     
    #include <iostream>
     
    #include "kArray.h"
     
    using namespace std;
     
    template <typename T> 
    class bleh 
    { 
        public : 
            bleh(void);
    }; 
     
    template <typename T>
    bleh<T>::bleh(void)
    {
    }
     
    int main(int argc, _TCHAR* argv[])
    {
        bleh<float> b;          // Aucun problème à la compilation
        kArray<float> kA;     // Problème à la compilation
     
        system("pause");
     
        return 0;
    }
    Lorsque je compile, j'ai l'erreur suivante
    error LNK2001: unresolved external symbol "public: __thiscall kArray<float>::kArray<float>(void)" (??0?$kArray@M@@QAE@XZ
    Si je commente kArray<float> kA, je n'ai plus de problème et le programme s'exécute. Ce que je cherche à comprendre, c'est pourquoi ma classe template bleh déclarée dans le même fichier que le main, qui est la même que kArray, arrive à passer au compilo, et pas celle que j'inclus ?

    J'ai beau chercher je ne comprends toujours pas... Et tous les exemples que j'ai vu sont fait ainsi : la classe template est toujours déclarée dans le même fichier que le main. Du coup je ne sais pas si c'est moi qui ai mal fait, ou si j'oublie quelque chose.

    Je vous remercie par avance!

    Goulmak.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Sans avoir regardé les détails, je dirais :
    http://cpp.developpez.com/faq/cpp/?p...VERS_templates

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Honte à moi, j'ai le nez sur la faq et j'ai zapé ce point

    Merci JolyLoic, c'était effectivement la solution.

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Il faut toujours garder à l'esprit que le template C++ n'a rien a voir avec le "generic" de Java ou de C#, mais est juste une instruction au compilateur de génération automatique de classes/fonctions...

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Il faut toujours garder à l'esprit que le template C++ n'a rien a voir avec le "generic" de Java ou de C#, mais est juste une instruction au compilateur de génération automatique de classes/fonctions...
    Basiquement, oui.

    Mais bon, ce n'est pas _juste_ ça...

    Y'a qu'à voir Loki & Boost, ne serait-ce que ça !

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Effectivement, je dirais que les template ne sont pas juste le sucre syntaxique équivalent à un cast du Java ou du C# (bien qu'en C#, il soit légèrement plus que ça), mais un véritable système de génération de code lors de la compilation.

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    En C# on peut désormais faire pleins de belles choses, mais c'est en fait le compilo qui manipule les templates plus que le développeur.

    En C++, on les maitrise totalement et on a ainsi une plus profonde compréhension de ces mécanismes.

    Les templates étant le domaine du C++ m'ayant intéressé le plus, je peux t'affirmer avec certitude que c'est bien plus que générer des fonctions et classes tout bêtement...

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

Discussions similaires

  1. [Débutant] Class Template
    Par Alfred12 dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2007, 08h43
  2. Réponses: 4
    Dernier message: 08/11/2005, 15h10
  3. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  4. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36
  5. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56

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