2010-08-09 2 views
1

Je rencontre des problèmes avec un programme C++ sur lequel je travaille. J'ai créé une classe abstraite avec une seule méthode virtuelle pure. Comme la classe n'a pas de variables ou de méthodes implémentées, j'ai stocké la classe dans un fichier d'en-tête sans fichier d'implémentation .cpp (il n'y en a pas besoin).Classe dans le fichier d'en-tête

La méthode est:

virtual void handleEvent() = 0; 

La question est quand je hérite de cette classe et mettent en place la méthode:

virtual void handleEvent(); (.h file) 
void handleEvent(){.....} (.cpp file) 

je reçois une erreur de compilation (en utilisant g ++):

(.rodata._ZtV10Engine[vtable for Engine]+0x8): undefined reference to Engine::handleEvent() 

Le fichier est inclus dans la classe d'en-tête Engine. Des idées pour lesquelles cela ne fonctionne pas?

Répondre

11

Je pense que vous avez oublié de mettre le qualificateur de classe dans l'implémentation .cpp. Il devrait probablement lire:

void Engine::handleEvent() { ... } 
+0

Merci. C'était ça (se sentir plutôt stupide maintenant). – NRaf

+1

Ne vous inquiétez pas, nous avons tous ces jours. – doron

0

Je dirais deus-ex-machina399 a probablement raison, mais il pourrait aussi être votre calling conventions (devrait être différents paramètres du compilateur entre au moins 2 différents fichiers .cpp). Essayez d'utiliser __cdecl ou __stdcall (ou quel que soit le nom correct pour le compilateur g ++, essayez de regarder this list)

Questions connexes