Cette erreur indique en effet qu'une méthode virtuelle n'est pas trouvée (= pas définie) lors de l'édition de liens (« linker »).
La raison de cette absence de définition peut avoir une origine diverse :
- vous « linker » avec un .o trop ancien qui n'a pas été remis à jour ;
explication : la méthode en question n'était pas virtuelle au départ, mais transformée en virtuelle ensuite, mais le .cc correspondant n'a jamais été recompilé et donc le .o contient toujours la version non virtuelle
tests facile :rm *.oavant de recompiler
correction : corriger le Makefile pour que toutes les dépendances (en particulier aux bons .h) soient correctes ; du coup toute modifications d'un .h concerné (typiquement celui où l'on a mit le virtual ;-) ) engendrera la recompilation du .cc concerné. - vous n'avez
effectivement pas défini la méthode virtuelle en question (ce qui est
pénible c'est que l'on ne sait pas laquelle c'est :-( ) ;
typiquement :- vous avez mis un destructeur virtuel mais ne l'avez pas défini ;
exemple :
au lieu de
ou - vous avez fait une faute de frappe entre le prototype et la définition ;
exemple :
dans le .h :
dans le .cc :
vous avez vu la faute ? (n au lieu de m) - oubli d'un constdans la définition ;
exemple :
dans le .h :
dans le .cc : - vous avez vraiment (simplement) oublié de définir une méthode virtuelle ;
- vous avez oublié de mettre le .o correspondant dans l'édition de liens : c'est presque pareil que le point 1.
- vous avez mis un destructeur virtuel mais ne l'avez pas défini ;
Bonne quête !