Problème de vtable avec une classe virtuelle pure
bonjour, hé oui c'est encore moi !! ( je pose beaucoup de question mais j'apprend beaucoup grace à vous !! ;) )
j'ai une classe abstraite (Animal, déclarée dans un Animal.h) avec trois méthodes virtuelles pures :
Code:
1 2 3
| virtual void trySeReproduire(Faune &)=0;
virtual void tryManger(Faune &)=0;
virtual void trySeDeplacer(Monde &)=0; |
et le destructeur est bien virtuel:
Code:
virtual ~Animal(){...}
j'ai une classe Lapin (déclaration dans un Animal.h) qui hérite de celle ci:
Code:
1 2 3 4 5 6 7 8 9
| class Lapin:public Animal{
...
//avec les même prototypes pour les méthodes virtuelles pures:
void trySeReproduire(Faune &);
void tryManger(Faune &);
void trySeDeplacer(Monde &);
...
}; |
j'ai implémenté ces méthodes dans Animal.cpp en incluant Animal.h
Code:
1 2
| void Lapin::trySeReproduire(Faune &f){ ... }
// idem pour les deux autres |
et le compilateur me balance "undefined reference to 'vtable for Lapin'
alors que les méthodes sont bien implémentées dans le .cpp
pour cerner le type d'erreur j'ai test dans Animal.h , dans la class Lapin :
Code:
void trySeReproduire(Faune &){}
tout en mettant celle implémentée dans Animal.cpp en commentaire , et la ça passe.
je comprend pas d'où vient cette erreur d'habitude c'est quand j'oublie d'implémenter une méthode virtuelle pure dans les classes héritières ou bien que j'oublie de mettre mon destrcuteur en virtuel dans la classe mère
Là pour le coup je vois pas d'ou vient l'erreur !
merci à vous une nouvelle fois !
Porco
...peut être un peu d'eau à ton moulin
"Pour les classes virtuelles, (...) chaque classe dérivée directement ou indirectement d'une classe virtuelle doit en appeler le constructeur explicitement dans son constructeur si celui-ci prend des paramètres."
(cours C++ de Christian Casteyde, Version 21/09/2002 page 102)