Pure virtual function call

Pure virtual function call - C++ - Programmation

Marsh Posté le 20-10-2009 à 16:22:06    

Hello,
 
J'ai un message "pure virtual function call" de MSVC 7.1 en release, alors qu'en debug ça ne le fait pas (même que le code fonctionne correctement)...
Voici le code fautif simplifié :
 

Code :
  1. class Base
  2. {
  3. public
  4.     Base();
  5.     virtual void doSmth() =0;
  6. };
  7. class Ext : public Base
  8. {
  9.     Ext();
  10.     virtual void doSmth();
  11. };
  12. Base::Base()
  13. {
  14.     doSmth();
  15. }
  16. Ext::Ext() : Base()
  17. {
  18. }
  19. void Ext::doSmth()
  20. {
  21.     std::cout << "pwet";
  22. }


 
Je vois pas trop pourquoi ça plante... Une idée ?


---------------
Be the one with the flames.
Reply

Marsh Posté le 20-10-2009 à 16:22:06   

Reply

Marsh Posté le 20-10-2009 à 16:28:27    

Ton constructeur de Base n'a pas de sens.

Reply

Marsh Posté le 20-10-2009 à 16:29:44    

pas de virtualité dans le constructeur. Quand tu construis Base, Ext n'est pas encore construit, tu n'as pas le droit d'en appeler une méthode.


---------------
last.fm
Reply

Marsh Posté le 20-10-2009 à 16:40:34    

Ok d'acc.
 
Du coup, pourquoi ça fonctionne en debug ? Compilo chelou ?


---------------
Be the one with the flames.
Reply

Marsh Posté le 20-10-2009 à 17:04:15    

Je ne vois pas de raison pour que ca fonctionne en debug


---------------
last.fm
Reply

Marsh Posté le 20-10-2009 à 17:08:20    

Hmm. Ça ne devrait même pas compiler, non ?

Reply

Marsh Posté le 20-10-2009 à 17:08:59    

Riot a écrit :

Ok d'acc.
 
Du coup, pourquoi ça fonctionne en debug ? Compilo chelou ?


Aucune raison, pour info je viens de tester ton code et avec VC++ 9 ça plante bel et bien en debug (une fois les typos corrigées, et un appel intermédiaire rajouté, car de base ça ne compile pas vu que tu n'es pas censé pouvoir appeler directement une fonction virtuelle pure dans le constructeur).
 
Accessoirement bonjour à tous (1st post).


Message édité par TheSamFrom1984 le 20-10-2009 à 17:10:27
Reply

Marsh Posté le 20-10-2009 à 17:09:04    

J'ai simplifié le bouzin, du coup le compilo le voit pas.

 

edit : dans mon code en fait, Base lance un thread qui appelle doSmth().


Message édité par Riot le 20-10-2009 à 17:10:26

---------------
Be the one with the flames.
Reply

Marsh Posté le 20-10-2009 à 17:37:34    

Ouille, tu as introduit une course entre la construction de l'objet et l'appel a son membre...


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 20-10-2009 à 17:44:49    

Une course ?


---------------
Be the one with the flames.
Reply

Marsh Posté le 20-10-2009 à 17:44:49   

Reply

Marsh Posté le 22-10-2009 à 00:39:21    

Bin l'objo se construit pendant que le thread s'éxécute.  
le moindre aléa multitâche et le thread appelle doSmth() avec l'objet construit ou pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed