Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
812 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pure virtual function call

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pure virtual function call

n°1933818
Riot
Buy me a riot
Posté le 20-10-2009 à 16:22:06  profilanswer
 

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.
mood
Publicité
Posté le 20-10-2009 à 16:22:06  profilanswer
 

n°1933831
Taz
bisounours-codeur
Posté le 20-10-2009 à 16:28:27  profilanswer
 

Ton constructeur de Base n'a pas de sens.

n°1933834
theshockwa​ve
I work at a firm named Koslow
Posté le 20-10-2009 à 16:29:44  profilanswer
 

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
n°1933846
Riot
Buy me a riot
Posté le 20-10-2009 à 16:40:34  profilanswer
 

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


---------------
Be the one with the flames.
n°1933863
theshockwa​ve
I work at a firm named Koslow
Posté le 20-10-2009 à 17:04:15  profilanswer
 

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


---------------
last.fm
n°1933867
Elmoricq
Modérateur
Posté le 20-10-2009 à 17:08:20  profilanswer
 

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

n°1933869
TheSamFrom​1984
Posté le 20-10-2009 à 17:08:59  profilanswer
 

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
n°1933870
Riot
Buy me a riot
Posté le 20-10-2009 à 17:09:04  profilanswer
 

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.
n°1933894
Un Program​meur
Posté le 20-10-2009 à 17:37:34  profilanswer
 

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)
n°1933902
Riot
Buy me a riot
Posté le 20-10-2009 à 17:44:49  profilanswer
 

Une course ?


---------------
Be the one with the flames.
mood
Publicité
Posté le 20-10-2009 à 17:44:49  profilanswer
 

n°1934346
bjone
Insert booze to continue
Posté le 22-10-2009 à 00:39:21  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pure virtual function call

 

Sujets relatifs
Erreur de la Function Filemtime()Call to a member function on a non-object
[résolu] Warning: Call-time pass-by-reference has been deprecatedpointeur sur function dans le class
Warning: mail() href='function.mail': Permission denied: headers injecFunction Url_encode/Url_decode
[RESOLU] __call et les tableauxProbleme variable entrante function Oracle
Function, Vérification doublons dans un formulaire 
Plus de sujets relatifs à : Pure virtual function call


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR