erreur LNK2019 - destructor virtuel en classe abstraite [double]
-
09-10-2019 - |
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.
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.