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

Langage C++ Discussion :

Vtable et constructeur


Sujet :

Langage C++

  1. #1
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut Vtable et constructeur
    Bonjour,
    Je cherche à appeler depuis une fonction fille, le constructeur de la classe mère, mais avec certain argument "passer dans une fonction" en gros :

    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
     
    class Plan {
        vecteur3D normal;
        point3D point;
    public :
        Plan(vecteur3D n,point3D p) : normal(n), point(p) {}
        virtual fonction() const;
    };
     
     
    class PlanFini: public class Plan {
        vecteur3D limit1,limit2;
    public :
        PlanFini(complexStruct c);
    protected :
        static vecteur3D computeNormal(complexStruct);
        static point3D computePoint(complexStruct);
    };
     
     
    PlanFini::PlanFini(complexStruct c) : Plan(computeNormal(c),computePoint(p)) {}
    Bien sûr, il me renvoie balader parce qu'il n'arrive pas à trouver la vtable de PlanFini >< ! Déjà, je n'ai pas trouver pourquoi il y a ce genre d'erreur. Après tout, mes fonctions sont static, donc pas besoin de vtable ><, ni même d'avoir construit la class mère !

    Y'aurait-il un moyen plus propre que de faire des setters protected, ou une classe externe pour computeNormal et computePoint ?

    Merci pour toute aide.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    C'est une erreur de gcc qui n'arrive pas à trouver où placer la vtable de Plan. Par défaut, il la place dans le .o contenant la définition de la première fonction non inline non statique de Plan. Si elle n'en contient pas, c'est foutu !
    Cf ici.

  3. #3
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Donc en gros, si je contait pas mettre de fonction non-inline et non-static, je suis obligé d'en rajouter une au moins pour du beurre ?

    Aurais-je eu le même problème avec un autre compilateur, si oui lesquels ?

    En tout cas, merci !

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    C'est à ce que je sais spécifique de GCC.
    L'erreur a des conditions assez particulières.
    Il me semble qu'en donnant un corps à fonction cela suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Plan {
        vecteur3D normal;
        point3D point;
    public :
        Plan(vecteur3D n,point3D p) : normal(n), point(p) {}
        virtual void fonction() const{}
    };

  5. #5
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    C'est dans la classe fille qu'elle n'était pas encore implémenter...
    Ce que je trouvais étrange, c'est que si je mettais les fonctions compute en non static, j'avais l'erreur VTT que j'ai l'habitude de voir... Mais si elles sont static, ça me met une erreur de vtable... Ce qui colle parfaitement avec l'explication...

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

Discussions similaires

  1. Instanciation, constructeur inline, vtable
    Par NiamorH dans le forum C++
    Réponses: 7
    Dernier message: 02/01/2008, 14h20
  2. [VB6]Déclaration d'un Constructeur Spécialisé
    Par TagadaTsoin dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 26/05/2004, 14h09
  3. [Constructeur]Pb avec la surcharge d un constructeur
    Par cmoulin dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2004, 09h29
  4. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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