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 :

Implémentation d'une méthode virtuelle pure par la classe dérivée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Implémentation d'une méthode virtuelle pure par la classe dérivée
    Bonjour,

    Je cherche à implémenter une méthode virtuelle pure héritée (dans la classe dérivée).
    Je pensais avoir bien fait les choses et pourtant, j'ai une erreur à la compulation qui m'indique que je dois implémenter la méthode pure héritée (ce que j'ai pourtant fait), voici le topo :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Abstract
    {
    ...
    virtual double function() const=0;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Derived : public Abstract
    {
    ...
    virtual double function() const;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "Derived.h"
    ...
    double Derived::function() const
    {
    // implementation
    }
    L'erreur survient lorsque j'instancie une classe dérivée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_derived  = Derived();
    // ERROR : must implement inherited pure virtual fucntion Abstract::function()
    Je comprends pas ce que j'ai fait de travers.

    EDIT: je précise que la classe Abstract a d'autres fonctions virtuelles simples, mais l'erreur concerne uniquement la virtuelle pure.

    EDIT : correction dans Derived.cpp : double Derived::function() const et non double function() const
    Merci de votre aide.

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Dans ton .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double function() const { }
    doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double Derived::function() const { }
    (?)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    dans un .cpp l'implémentation d'une fonction membre c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TypeReturn MyClass::MyMethod(args) [const]
    {
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Oui merci j'ai corrigé dans l'exemple, c'était juste un oubli dans l'exemple (dans mon code c'était déjà bon).

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Le code que tu présentes est bon.
    As-tu une surcharge de la méthode non const ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Non, la fonction est implémentée une seule fois comme indiqué au-dessus.

    EDIT: je suis sous Eclipse, et l'erreur apparait immédiatement dès que je déclare la classe dérivée comme varible membre d'une autre classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class DerivedUser
    {
    ...
    Derived m_derived;
    // ERROR : must implement inherited oure virtual function Abstract::function()
    };

  7. #7
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Apparement la solution est d'utiliser un pointer sur un objet de la classe dérivée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class DerivedUser
    {
    ...
    Derived* m_derived; // là c'est bon
    };
    J'ai vu ça sur Stack Overflow :
    http://stackoverflow.com/questions/4...-abstract-type

    Mais j'ai pas bien compris pourquoi.

    EDIT : en fait nan ça marche pas, je peux juste déclarer un membre de type Derived*, mais il me dis toujours qu'il faiut implémenter la méthode virtuelle pure héritée.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/10/2012, 19h25
  2. Réponses: 15
    Dernier message: 08/07/2012, 23h49
  3. Réponses: 17
    Dernier message: 29/07/2009, 17h12
  4. Réponses: 2
    Dernier message: 02/10/2008, 16h37
  5. Problème avec une méthode virtuelle pure
    Par Burckel dans le forum C++
    Réponses: 4
    Dernier message: 05/12/2006, 13h00

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