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 :

Template C++ constructeur avec arguments


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 100
    Points
    100
    Par défaut Template C++ constructeur avec arguments
    Bonjour,

    Je suis en train d'essayer de faire ma première template en C++ et je bloque sur un problème sûrement stupide:
    J'ai le code suivant (j'ai enlevé tout ce qui était inutile) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Fichier timequeue.h
    namespace monNameSpace
    {
    template <class T>
    class TimeQueue
    {
    	public :
                     TimeQueue(int _elementTimeSpan);
    };
    }
    Mon fichier .cpp est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //fichier timequeue.cpp
    #include "timequeue.h"
    template <class T>
    monNameSpace::TimeQueue<T>::TimeQueue(int _elementTimeSpan){}
    et mon main file:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "timequeue.h"
    using namespace monNameSpace;
    int main()
    {
    TimeQueue<int> queues(20);
    return 0;
    }
    Le code ne compile pas : " undefined reference to `monNameSpace::TimeQueue<int>::TimeQueue(int)'

    alors qu'il compile si j'enlève l'argument au constructeur. D'où vient le problème ?

  2. #2
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,

    Ton problème est que le template dois être entièrement dans le .h
    Lorsque tu as ton constructeur paramétrique, le compilateur ne trouve pas la définition du constructeur qui est dans le .cpp.
    Lorsque tu retires le paramètre, le compilateur ne vas pas le trouver mais il vas créer un constructeur par défaut, d'où le faite que ça marche. Mets tout dans ton .h et ça marchera.
    Homer J. Simpson


  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 100
    Points
    100
    Par défaut
    Merci pour ta réponse.
    Ce n'est donc pas possible de mettre qqch dans le cpp ??
    Dois-je faire pareil pour les fonctions que je vais déclarer ensuite ?

  4. #4
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Dans le cpp tu pourras mettre les spécialisations de tes templates. Il exite un moyen avec le mot clé "export" mais très déconseillé car il est peu implémenté dans les compilateurs actuel à cause de difficultés techniques trop importantes.

    Pour toute les fonctions templater tu dois le mettre dans le .h, les autres normales tu peux les mettre dans le cpp.
    Homer J. Simpson


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 100
    Points
    100
    Par défaut
    Qu'entends-tu par spécialisation de ma template ?

  6. #6
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    http://cpp.developpez.com/faq/cpp/?p...specialisation

    Excuse moi j'ai fais un abus de langage, ce n'est pas vraiment la spécialisation mais si tu déclares dans ton cpp le compilateur les compileras, ça n'est vraiment utile que pour les DLL, dans ton cas ça ne t'ai pas utile.
    Homer J. Simpson


  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 100
    Points
    100
    Par défaut
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. Constructeur avec arguments
    Par 2001hal dans le forum Android
    Réponses: 4
    Dernier message: 19/03/2014, 17h30
  2. Problème avec argument par défaut de templates
    Par benlaug dans le forum Langage
    Réponses: 3
    Dernier message: 08/01/2012, 09h59
  3. Réponses: 4
    Dernier message: 23/07/2011, 08h35
  4. Réponses: 11
    Dernier message: 20/11/2010, 13h08
  5. Probleme de constructeur avec argument
    Par juloss dans le forum C++
    Réponses: 4
    Dernier message: 29/01/2008, 19h55

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