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 et héritage de containeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut template et héritage de containeur
    Bonjour,

    J'ai un problème que je ne comprends pas. J'ai créé une classe héritant de QList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template<class T>
    class A: public QList<<T> > {
    ...
     
    int f() {
        return size();
    }
    }
    et j'obtiens l'erreur suivante :

    there are no arguments to ‘size’ that depend on a template parameter, so a declaration of ‘size’ must be available

    Quelqu'un pourrait-il m'aider ? Est-ce que j'ai zappé quelque chose d'important dans la déclaration de ma classe ?

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 13
    Par défaut
    Quand tu hérites d'une base template tu dois préfixer les appels des fonctions de la base par son type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int f() {
        return QList<T>::size();
    }
    Soit dis en passant j'aurais plutôt tendance a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template<class T>
    class A: public QList<T> 
    {
    public:
        using QList<T>::size;
    }
    Ceci bien sur dans la mesure ou tu n'a pas besoin de changer le comportement de la fonction size de la classe de base.
    Attention également, dans le cas de la STL et potentiellement de ton QList, le destructeur n'est pas virtuel.

  3. #3
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Généralement c'est une très mauvaise idée d'hériter d'un container. Il faut que tu envisages la composition ! Notamment parce que aucunes méthodes n'est virtuelles.

    Sujet déjà abordé ici : http://www.developpez.net/forums/d25...eriter-vector/

    et la : http://www.developpez.net/forums/d77...r-classes-stl/

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Et la FAQ : Pourquoi et quand faut-il créer un destructeur virtuel ?
    Et je vais insister plus que les 2 autres intervenants : tu dois pas faire ça

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut
    Bon ben je vais révisé ma copie

    Merci pour vos réponses !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut
    @Gymble : les <> sont un oubli de ma part, j'aurais dû les effacer.

    Sinon, je vais passer par la composition même si cette solution ne m'enchante pas trop puisque cela demande d'écrire du code supplémentaire.

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

Discussions similaires

  1. Template et héritage
    Par Ulmo dans le forum Langage
    Réponses: 16
    Dernier message: 08/03/2009, 23h41
  2. Template et héritage
    Par rooger dans le forum Langage
    Réponses: 5
    Dernier message: 22/07/2008, 13h48
  3. Foncteur, classes templates et héritage
    Par Floréal dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2007, 21h56
  4. Template ou héritage
    Par bolhrak dans le forum Langage
    Réponses: 6
    Dernier message: 22/12/2006, 11h22
  5. patron, templates et héritages!
    Par kleenex dans le forum C++
    Réponses: 4
    Dernier message: 05/06/2006, 22h57

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