Question

  

Possible en double:    destructor virtuelle pure en C ++

J'ai deux classes: la classe abstraite « Game » et la classe dérivée « TestGame ». Toutes les fonctions de TestGame sont mises en œuvre séparément à rien (pour le bien de l'obtenir à la compilation). Je ne reçois une erreur:

  

TestGame.obj: erreur LNK2019:   symbole externe non résolu « public:   Jeu virtuel __thiscall :: ~ Jeu (void) »   (?? 1Game @@ EAU @ XZ) référencé dans   fonction « publique: __thiscall virtuelle   TestGame :: ~ TestGame (void) »   (?? 1TestGame @@ EAU @ XZ)

Voici mes définitions de classe:

class Game
{
public:
    virtual ~Game(void) = 0;

    virtual bool Initialize() = 0;
    virtual bool LoadContent() = 0;
    virtual void Update() = 0;
    virtual void Draw() = 0;
};

class TestGame: public Game
{
public:
    TestGame(void);
    virtual ~TestGame(void);

    virtual bool Initialize();
    virtual bool LoadContent();
    virtual void Update();
    virtual void Draw();
};

J'ai essayé deux ou trois choses, mais je pense que peut-être je manque quelque chose de fondamental sur la façon abstraire et tirer des œuvres de classes.

Était-ce utile?

La solution

En fait, vous devez définir les destructor pour la classe de base, même si elle est virtuelle pure, puisqu'elle sera appelée lorsque la classe dérivée est détruite.

virtual ~Game() { /* Empty implementation */ }

Le = 0 pour n'est pas nécessaire virtuelle pure, puisque vous avez d'autres fonctions virtuelles pures pour rendre votre classe abstraite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top