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 :

Problème avec template + héritage


Sujet :

Langage C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 85
    Points
    85
    Par défaut Problème avec template + héritage
    Bonjour,

    Je suis en train de migrer une appli vb.net vers C++, mais étant assez novice dans ce langage, je suis évidemment bloqué sur quelque chose que je soupçonne tout bête depuis 2 jours...

    Alors voila :
    J'ai une classe template A, et je voudrais faire un héritage dessus sans que la classe fille soit template (qu'elle donne le type "en dur" au parent)... je sais que c'est faisable en .net, mais en cpp ?
    en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //classe de données
    class Data {};
     
    //la classe template parent
    template <class T>class A {};
     
    //la classe fille qui ne doit pas etre template, mais transmettre le type "en dur" à son parent
    class B : public A<Data>{};
    J'ai essayé de tourner ça dans tous les sens, mais impossible de faire compiler la chose.
    Si quelqu'un à une idée ça m'enleverait une belle épine du pied...

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    L'erreur est surrement ailleurs car la syntaxe est correcte ici.

  3. #3
    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
    Ta syntaxe est bonne, si tu veux de l'aide il va donc falloir donner le message d'erreur et le vrai code correspondant

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Bonjour

    cela pourrai t aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template <typename Type> class A
    {
    };
    class B : public A<int>
    {
     
    };

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 85
    Points
    85
    Par défaut
    Wow, merci pour les réponses rapides !

    donc la classe parente:
    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "CData.h"
    template <class T> class CDal_Abstract {
    public:
    	CDal_Abstract();
    	virtual ~CDal_Abstract();
    };
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "CDal_Abstract.h"
    template<class T> CDal_Abstract<T>::CDal_Abstract(){}
    template<class T> CDal_Abstract<T>::~CDal_Abstract(){}
    la classe fille :
    .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "CDal_Abstract.h"
    #include "CRef.h"
    class CDal_Ref : public CDal_Abstract<CRef> {
    public:
    	CDal_Ref();
    	virtual ~CDal_Ref();
    };
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "CDal_Ref.h"
    CDal_Ref::CDal_Ref() : CDal_Abstract<T>(){}
    CDal_Ref::~CDal_Ref(){}
    à savoir qu'ici j'ai essayer avec le <T>, sans (comme ici le destructeur), avec CDal_Abstract<T>::CDal_Abstract(), ...


    et les erreurs :
    undefined reference to `CDal_Abstract<CRef>::~CDal_Abstract()'
    undefined reference to `CDal_Abstract<CRef>::~CDal_Abstract()'

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Selon l'expérience que j ai des templates en cpp, je mets le corps des méthodes directement dans le .h et ca évite beaucoup de problèmes
    Je sais que ce n est pas propre.

    mais il ya une petite erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "CDal_Ref.h"
    CDal_Ref::CDal_Ref() : CDal_Abstract<T>(){}
    CDal_Ref::~CDal_Ref(){}
    remplacez T par CRef

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 85
    Points
    85
    Par défaut
    Ah oui, c'était le reste d'un test...

    J'ai essayé dans le même fichier, ça ne change rien...

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Réponse dans la FAQ
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 85
    Points
    85
    Par défaut
    J'avais déjà regardé, j'y suis retourné mais je ne trouve pas. J'ai essayer d'inclure le code du .cpp dans le .h comme indiqué mais j'ai toujours la même erreur, il faut dire que je ne suis pas encore super à l'aise avec le C++, je me perds un peu entre les typename, typedef, trait...
    Pourriez vous être plus précis ?

  10. #10
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 85
    Points
    85
    Par défaut
    Yes !

    En fait la première fois je n'avais regroupé le code dans le .h que dans la classe enfant, en le mettant aussi dans la classe parent tout passe nickel.

    Merci à tout le monde pour vos réponses rapides, ça me conforte encore un peu plus dans mon idée sur la qualité de ce site

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

Discussions similaires

  1. problème avec mcd héritage
    Par minooo dans le forum Schéma
    Réponses: 4
    Dernier message: 16/01/2008, 09h57
  2. Problème avec templates et iterateurs :(
    Par donkeyquote dans le forum C++
    Réponses: 5
    Dernier message: 01/11/2007, 16h29
  3. [PHPLIB] Problème avec Template PHPLib
    Par bobic dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 19/11/2006, 18h07
  4. [VC++] Problème avec un héritage
    Par Freakazoid dans le forum Visual C++
    Réponses: 7
    Dernier message: 28/11/2005, 08h35
  5. [DEBUTANT] Probléme avec l'héritage
    Par BRAUKRIS dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 20h22

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