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 :

[Template] Pointeur sur classe template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Par défaut [Template] Pointeur sur classe template
    Bonjour à tous

    J'aimerai savoir si on peut faire un pointeur sur une classe template. J'ai une classe BaseManager qui se présente comme ceci :
    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
     
    template<class T>
    class BaseManager
    {
    private:
     
        ...
        ResourceLRUCache<T>* mLRUCache;
        ...
     
    public:
     
        BaseManager()
        {
            mLRUCache = new ResourceLRUCache<T>();
        }
        ...
    }
    Et j'ai une classe DynamicObjectManager qui exploite mon BaseManager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class DynamicObjectManager : public BaseManager<DynamicObject>
    {
        ...
    }
    Et g++ grogne sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mLRUCache = new ResourceLRUCache<T>();
     
    erreur: invalid use of incomplete type «struct Naos::ResourceLRUCache<Naos::DynamicObject>»
    Voila je sais pas trop si j'ai le droit de faire ca dans le constructeur de BaseManager.

    Naoss.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Si, si. Tu as le droit:
    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
    template<class T>
    class A
    {
    };
     
    template<class T>
    class B
    {
       public:
       B()
       {
          m_a = new A<T>();
       }
       ~B(){
          delete m_a;
       }
     
       A<T> *m_a;
    };
     
    class C :public B<int>
    {
    };
     
    int main(void)
    {
       C c;
        return 0;
    }
    Ca compile!
    Ton problème doit être ailleurs. Je dirais qu'au moment d'instancier, il ne connait pas DynamicObject mais juste son prototype?

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Il faudrait déjà voir si la classe ResourceLRUCache est bel et bien template... Car rien, dans le code fourni, ne nous permet de l'affirmer.

    Ensuite, le message est - malgré tout - relativement explicite:

    Au moment de créer un objet de type Naos::ResourceLRUCache<Naos:: DynamicObject>, (autrement dit, lors de l'appel à new RessourceLRUCache</*...*/> ) ton compilateur sait que cela existe (il y a peut être eu une déclaration anticipée du type en question), mais il ne dispose pas de sa définition complete

    Cela fignifie, le plus souvent, que tu a oublié d'inclure le fichier d'en-tête dans lequel le type concerné est effectivement défini (par opposition à déclaré)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Pointeur sur classe template
    Par SmOkEiSBaD dans le forum Langage
    Réponses: 6
    Dernier message: 23/04/2011, 12h29
  2. Réponses: 1
    Dernier message: 09/04/2010, 11h15
  3. Réponses: 4
    Dernier message: 20/10/2009, 08h54
  4. [Débutant] Passage de pointeur et classe template
    Par guigouz dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2008, 14h58
  5. Réponses: 8
    Dernier message: 20/07/2007, 14h28

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