Référence non définie à vtable dans Qt

Je reçois une erreur de table virtuelle alors que je ne détecte aucune erreur dans mon code. Quelqu’un pourrait-il me donner un point dans la bonne direction? Désolé pour la terminologie néerlandaise, j’espère que ce n’est pas un problème.

#ifndef LIJST_H #define LIJST_H #include "product.h" #include  typedef list lijst; #endif // LIJST_H // Methode #ifndef METHODE_H #define METHODE_H #include "lijst.h" class Methode { public: Methode() {} virtual ~Methode() {} virtual double run(lijst *items); }; #endif // METHODE_H // Productmethode #ifndef PRODUCTMETHODE_H #define PRODUCTMETHODE_H #include "methode.h" class ProductMethode : public Methode { private: map kortingsTabel; public: ProductMethode() {} void addKorting(ssortingng naam, double korting); double run(lijst *items); }; // Main #include  #include "factuur.h" #include "product.h" #include "globalemethode.h" #include "productmethode.h" #include "drempelmethode.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); GlobaleMethode G ( 0.1 ); ProductMethode P; P.addKorting ( "Melk", 0.1 ); P.addKorting ( "Boter", 0.05 ); Factuur F ( &G ); F.addProduct ( new Product ( "Melk", 0.75 ) ); F.addProduct ( new Product ( "Kaas", 5 ) ); F.addProduct ( new Product ( "Boter", 1.7 ) ); cout << F.totaal ( ) << endl; F.setMethode ( &P ); cout << F.totaal ( ); return a.exec(); } 

Vous venez de déclarer une méthode dans la classe Methode :

 virtual double run(lijst *items); 

La méthode doit également être définie. Seules les fonctions virtuelles pures sont autorisées à être sans définition.

En outre, on utilise généralement le comportement virtual pour surdéfinir une certaine méthode de classe de base pour une classe dérivée, mais dans votre exemple, vous ne fournissez pas de définition pour la méthode virtual masquée. Vous devriez. Si vous n’en avez pas besoin, pourquoi avez-vous d’abord virtual la méthode? Ce n’est pas nécessairement virtual .


Bonne lecture:

Qu’est-ce que cela signifie que la “table virtuelle” est un externe non résolu?