Partage
  • Partager sur Facebook
  • Partager sur Twitter

Héritage en C++

Champs hérités "undeclared"

Sujet résolu
    31 mai 2006 à 10:51:00

    Alors, voila le code minimal qui vous permettra de comprendre (mais peut-être pas de compiler) :
    class Perso;

    // Classe mère pour tous les objets
    class CObjet {

    public:
        Vecteur2D vPos;
        Vecteur2D vVel;

    public:
        virtual bool Move() = 0; // Si retourne false, l'objet n'existe plus
        virtual void Draw() = 0;

    };

    // Classe de base pour tous les projectiles
    class CProjectile : public CObjet {

    public:
        Perso* pTireur;

    };

    // Un obus de bazooka
    class CObus : public CProjectile {

    public:
        bool Move();
        void Draw();
        CObus(Perso*);

    };

    // Une grenade
    class CGrenade : public CProjectile {

    public:
        bool Move();
        void Draw();
        CGrenade(Perso*);

    };



    CObus::CObus(Perso* perso)
     : vPos(perso->vPos),vVel(perso->vVel) // erreur
    {
        vVel.Normalise();
        vPos += vVel*20.0;
        vVel *= 300.0;
    }

    /* Erreur dans le constructeur :                          **
    **    In constructor "CObus::CObus(Perso*) :              **
    **  class "CObus" does not have any field named "vPos"    **
    **  class "CObus" does not have any field named "vVel"    **
    **                                                        **
    ***********************************************************/


    Comme vous pouvez le voir, CObjet a des champs vPos et vVel. CObus hérte de CProjectile, qui hérite de CObjet (en public).
    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2006 à 11:07:02

      Ne devrais-tu pas avoir de constructeur / destructeur pour ta classe mère ?
      • Partager sur Facebook
      • Partager sur Twitter
        31 mai 2006 à 11:19:55

        Non, elle est virtuelle pure en fait (c'est un code minimal ici).

        J'ai trouvé la solution : une construction d'un membre de la classe mère n'est pas valide, il faut appeler le constructeur de la classe mère depuis la classe fille, qui se charge ainsi d'initialiser ses membres.

        Tant pis, je vais passer par une affectation au lieu d'un constructeur...
        • Partager sur Facebook
        • Partager sur Twitter

        Héritage en C++

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown