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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    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 éprouvé
    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
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    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 averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    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 averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    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)

+ 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