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

Discussion :

Erreurs de table virtuelle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Par défaut Erreurs de table virtuelle
    Bonjour,

    Je développe un programme sous Qt utilisant un design pattern composite (j'ai hésité à poster dans la catégorie Qt mais je pense que c'est un problème de c++ seulement).
    Je reçois les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mainwindow.cpp:-1: erreur : undefined reference to 'vtable for Composite'
    objet.cpp:-1: erreur : undefined reference to 'vtable for Objet'
    scene.cpp:-1: erreur : undefined reference to 'vtable for Composite'
    Sachant que Objet et Scene héritent de Composite et que Scene possède un " private : QVector<Composite> objetsScenes; ".
    Code :
    Composite
    Objet
    Scene
    MainWindow
    Avez-vous une idée du problème ?
    Merci.

    Ps. J'ai essayé de "netoyer le projet", "executer qmake" et de "recompiler le projet" : ça ne change rien.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    "undefined vtable" signifie que la table des pointeurs sur les éléments virtuels n'existe pas pour la classe (de base).
    Il te faut une fonction non inline dans la classe de base. En général, on opte pour le destructeur.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Salut

    En l'occurence, la classe de base est une classe de Qt a priori, donc le problème vient pas de là (ou plus précisement, il sera difficile de modifier le code de Qt pour supprimer cette erreur)
    C'est une erreur classique et l'erreur la plus probable est l'oubli de la macro Q_OBJECT
    Voir la FAQ : Erreur d'édition des liens undefined reference to 'vtable for xxx' ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En effet, je n'avais pas vu ce "détail", et comme je ne connais pas (encore) Qt…

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Par défaut
    J'utilise la macro Q_OBJECT seulement dans les classes utilisant les slots/signals, et je ne l'ai pas oublié.
    L'erreur provient de la fonction virtuelle "in(Point*, Point*, Point*)" de ma classe composite, instanciée seulement par les classes hérités.
    L'erreur se corrige en rendant la fonction const, mais cela m'empeche de modifier mon objet (or "in" doit modifier le booléen "selected" de l'objet).
    Avez-vous une idée de comment faire ?

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    @leternel
    finalement, c'est peut être toi qui été le plus proche de la vérité

    @Th0ms0n
    Peut être le fait que tu as des fonctions virtuelles non pures sans implémentation. Essaies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void in(Point*, Point*, Point*) = 0; // virtuel pure
    // ou 
    void in(Point*, Point*, Point*) {} // implémentation

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

Discussions similaires

  1. table virtuelle message erreur
    Par backdraf dans le forum Développement
    Réponses: 4
    Dernier message: 18/02/2010, 16h44
  2. Erreur SQL : Table/alias non unique
    Par albert69 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/11/2005, 17h31
  3. Réponses: 4
    Dernier message: 28/09/2005, 18h00
  4. LIBPQ - Affichage requete dans table virtuelle
    Par Mike@Nestor dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/07/2005, 14h11
  5. erreur : la table n'existe pas !!!
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/06/2005, 14h17

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