IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[pure virtual call] erreur d'execution


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [pure virtual call] erreur d'execution
    salut,

    je comprend pas trop, mais mon code plante sur un polymorphisme.
    Soit 3 lasses. La première est abstraite et contient une methode virtuelle pure. Et les deux autre classe hérite de la première implemente cette methode virtuelle. Mais lors de l'appelle à cette methode ( l'appel est fait dans la classe abstraite), je tombe jamais dans le code d'une des classe fille. Ca me plante mon programme. Le debugger me dit : R6025 Pure virtual function call.

    des idées ?

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Tu ne ferais pas cet appel dans le constructeur de la classe de base des fois?
    Ça se n'est pas possible, car dans le constructeur de la classe de base this n'est pas construit pour le type dérivé.

    SInon pense bien a appeller cette méthode virtuelle sur this...

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    C'est ce que je me disais, mais l'appel à un constructeur contenant une fonction virtuelle pure ne devrait pas passer la compilation... a priori

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Si ça passe.

    Autre cas de figure:
    - un thread vent de détruire ton objet,
    - un second accède ensuite à une fonction virtuelle de l'objet
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Si ça passe.
    Au temps pour moi. En y pensant, j'avais déjà eu le problème. Honte à moi!
    Donc en monothread, c'est bien ça... Surtout pas d'appel à une fonction virtuelle pure dans un constructeur, l'objet dérivé n'existe pas encore, comme l'a déjà fait remarqué MatRem.

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Je réponds un peu tard mais je viens d'avoir le problème. Es-tu sur VC6 ? c'est mon cas.

    Voilà le pourquoi de l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class A
    {
    public:
      virtual void Do() = 0;
    };
     
    class B : public A
    {
    public:
      B() {}
    };
     
    int main()
    { 
      B().Do();
      return 0;
    }
    Ce code ne compile pas et c'est logique : B ne définit pas Do() donc il n'a pas le droit d'être instancié.
    Maintenant si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class A
    {
    public:
      virtual void Do() = 0;
    };
     
    class B : public A
    {
    public:
      B( int ) {}
    };
     
    int main()
    { 
      B( 'Boom' ).Do();
      return 0;
    }
    VC6 compile et ça fait Boom à l'exec.

    Evidement c'est pas toujours écrit aussi clairement dans le code et, moi, je me suis fait avoir via un algo avec des find_if imbriqués...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur dans la surcharge de fonction pure virtual
    Par Razgriz dans le forum Débuter
    Réponses: 2
    Dernier message: 01/10/2009, 17h56
  2. "Pure virtual function called" et destructeur virtuel
    Par Seb des Monts dans le forum C++
    Réponses: 9
    Dernier message: 10/09/2009, 16h54
  3. Réponses: 4
    Dernier message: 17/05/2007, 16h47
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo