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éfinition de méthodes pour une classe template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Définition de méthodes pour une classe template
    Salut!

    J'ai essayé d'implémenter une liste doublement chainée comme classe template.
    Mais je ne suis pas arriver à définir les méthodes de la classe à l'extérieur de celle-ci et ai du les "rapatrier" à l'intérieur.
    Voici une illustration minimale du problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template<typename T>                         
    class A{                    
          T n;
          A(T a):n(a){};
          T* createPointer();
          };
     
    T* A::createPointer(){
                       return &n;
                       }
    Le compilo, g++ avec DevC++, me renvoie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    27 C:\DOCUME~1\PROPRI~1\Bureau\main_test.cpp expected constructor, destructor, or type conversion before '*' token 
    27 C:\DOCUME~1\PROPRI~1\Bureau\main_test.cpp expected `,' or `;' before '*' token
    venant du fait qu'il ne comprend pas ce T qui en dehors de la classe n'a pas de signification.

    Sinon tout est bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template<typename T>                         
    class A{                    
    private:
            T n;
    public: 
            A(T a):n(a){};
            T* createPointer(){
                       return &n;
                       }      
          };
    marche sans problème.

    Comment créer proprement les méthodes d'une classe template en dehors de celle-ci?

    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il faut mettre aussi un template avant
    Et pouquoi ne pas tout mettre dans la classe ?

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par Miles
    Il faut mettre aussi un template avant
    Je voit pas où.
    Et pouquoi ne pas tout mettre dans la classe ?
    C'est juste une question de bonne présentation et organisation du code.

  4. #4
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Devant la définition de ta méthode qui est séparée de la classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename T>
    T* A::createPointer(){
            return &n;
     }

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Sinon, il ne peut pas savoir ce qu'est T.

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ca ne marche pas, ou je m'y prend mal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename T>
    T* A::createPointer(){
                       return &n;
                       }
    De plus cette notation est valide pour les méthodes templates de n'importe quelle classe et donc il me renvoie l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     28 C:\DOCUME~1\PROPRI~1\Bureau\main_test.cpp `template<class T> class A' used without template parameters 
    C:\DOCUME~1\PROPRI~1\Bureau\main_test.cpp In function `T* createPointer()': 
    29 C:\DOCUME~1\PROPRI~1\Bureau\main_test.cpp `n' undeclared (first use this function)
    Ma méthode n'est pas template, seule ma classe l'est.

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

Discussions similaires

  1. Spécialisation de greater pour une classe template
    Par oodini dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2012, 09h31
  2. Réponses: 2
    Dernier message: 01/12/2011, 13h16
  3. Réponses: 1
    Dernier message: 09/04/2010, 11h15
  4. Définition const. & dest. d'une classe template
    Par KuroAkisame dans le forum Langage
    Réponses: 4
    Dernier message: 02/09/2008, 16h26
  5. Réponses: 7
    Dernier message: 22/02/2007, 16h57

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