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

Autres éditeurs Discussion :

fonctions virtuelles


Sujet :

Autres éditeurs

  1. #1
    Mau
    Mau est déconnecté
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 19
    Points
    19
    Par défaut [Resolu]fonctions virtuelles
    Bonjour,

    j'ai un petit problème de fonction virtuelle avec Kdevelop...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class X {
    X(){...}
    virtual ~X(){}//destructeur virtuel
     
    virtual void test()=0;//fonction virtuelle pure
    }
     
    class Y : public X  {
    Y(){...}
    ~Y(){...}
     
    void test(){...}
    }
    voila je pense que le code est bon, mais j'ai une erreur :

    undefine reference to X::~X[not in charge]()....
    undefine reference to vtable for X
    voila si qqn voit d'ou ca vient...
    a plus mau

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    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 282
    Points : 11 036
    Points
    11 036
    Par défaut
    En supposant, que les oublis de point-virgules et de "public:" ("protected:" étant au moins requis pour le constructeur sans arguments de X et le destructeur) soient une coquille en retransposant ton code ici, je ne vois pas trop.
    Tu as essayé de compiler la version hyper simplifiée de ton code (ie la même que celle proposée ici mais sans rien à la place des "..." ou alors des sorties écrans) ?

  3. #3
    Mau
    Mau est déconnecté
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Oui, c'est vrai que le code est assez allégé,

    pour le protected je vois pas trop a quoi il va servir ici,

    les public c'est un oubli...

    en fait je cherche une explication au

    [vtable]

    et au

    [not incharge]

    voila

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    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 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Cette version corrigée de ton code allégé fonctionne parfaitement (GCC 3.3.1 ; cygming special comme ils disent).
    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
    18
    19
    20
    21
    22
    #include <iostream>
     
    struct X { 
        X(){} 
        virtual ~X(){}//destructeur virtuel 
        virtual void test()=0;//fonction virtuelle pure 
    } ;
     
    struct Y : public X  { 
        Y(){} 
        ~Y(){} 
        void test(){
            std::cout << "Y::test" << std::endl;
        }
    }; 
     
    int main () {
        X * x = new Y();
        x->test();
        delete x;
        return 0;
    }
    J'en déduis que ton problème est ailleurs. De plus, ton erreur ressemble plus à une erreur de link qu'à une erreur de compilation, je me trompe ?
    Tu utilises des options de compilation particulières ?

    Ceci dit, j'ai trouvé un cas qui donne ton erreur ... Cas qui me fait dire qu'en recopiant ton code ici tu as introduit de nouvelles erreurs, mais surtout corrigé celle qui t'amene.
    Tu n'aurais pas oublié de donner un corps au destructeur de X ? Essaie donc le code ci dessus sans les accolades pour ~X. C'est bien une erreur de link.
    Parenthèse à tout à hasard, même les destructeurs virtuels purs doivent avoir un corps.

    Ma parenthèse au sujet de protected, c'était pour dire que le destructeur ne pouvait pas être privé. Et dans l'exemple d'utilisation ci dessus, il ne peut pas être "protégé" non plus.

  5. #5
    Mau
    Mau est déconnecté
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Ok c'etait bien cela,

    le corps du destructeur de X...

    merci beaucoup,

    a plus

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

Discussions similaires

  1. C++ - Probleme avec fonction virtuelle
    Par vdumont dans le forum C++
    Réponses: 1
    Dernier message: 20/03/2006, 21h49
  2. Réponses: 2
    Dernier message: 05/03/2006, 20h29
  3. Compilation avec des fonctions virtuel pure
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 16/12/2005, 15h37
  4. masquage de fonction virtuelle
    Par julien.sagnard dans le forum C++
    Réponses: 3
    Dernier message: 27/01/2005, 15h00
  5. Réponses: 2
    Dernier message: 07/10/2004, 18h00

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