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

Qt Discussion :

Q_OBJECT génere une erreur "undefined reference to `vtable for…`"


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut Q_OBJECT génere une erreur "undefined reference to `vtable for…`"
    Bonjour à tous.

    Je souhaite réaliser une simple boite de dialogue sous Qt 5.7.0.

    Néanmoins tous mes tests échouent.

    A force d'essais, je pense avoir fini par identifier l'origine du problème.

    Dans un simple code comme celui-ci :

    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
    23
    24
    25
     
    #include <QApplication>
    #include <QDialog>
     
    class MyDialog: public QDialog
    {
        Q_OBJECT
     
        public:
        MyDialog(){}
     
        public slots:
     
        private:
     
    };
     
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
        MyDialog fenetre;
        fenetre.exec();
        return app.exec();
    }
    J'obtiens les erreurs suivantes :
    - undefined reference to `MyDialog::MyDialog()'
    - undefined reference to `vtable for MyDialog'

    Le problème semble venir de la macro Q_OBJECT. Si je la commente, plus d'erreur.

    Mon fichier .pro est ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QT += widgets
     
    SOURCES += \
        main.cpp

    Auriez vous une idée du problème ?

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    J'avais eu ce soucis également, c'est dû au fait que moc n'aime pas quand une classe est entièrement définie dans un header seul.
    Il faut impérativement le séparer en deux, header et implémentation.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut
    Tout ceci multiplie les fichiers à gérer, mais effectivement quand c'est séparé, ça passe correctement. Dommage, je trouvais que cette forme était bien pratique pour une malheureuse boite de dialogue, par exemple.

    Donc, dorénavant, un .h et un .cpp.

    Merci beaucoup pour cette aide, car j'ai perdu pas mal de temps à tenter de comprendre le pourquoi du comment.

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Je suis d'accord, mais c'est le moc qui le veut.

    Cependant Qt a commencé à se séparer du moc et à le remplacer par d'autres outils.
    Reste à voir si ça va être mieux.

    (Si tu n'as pas d'autres questions, tu peux mettre le sujet en résolu.)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Par défaut
    Slt,
    tu peux tout faire dans le main.cpp mais il faut ajouter à la fin du main.cpp :
    src : http://doc.qt.io/qt-5/moc.html

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut
    Pas si simple.

    Je l'avais fait, mais j'obtiens l'erreur suivante : main.moc: No such file or directory


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

Discussions similaires

  1. Réponses: 13
    Dernier message: 17/05/2010, 21h28
  2. Réponses: 1
    Dernier message: 19/07/2009, 22h37
  3. undefined reference to `vtable for Graphique'
    Par lilly91 dans le forum Débuter
    Réponses: 11
    Dernier message: 23/06/2009, 17h41
  4. undefined reference to `vtable for
    Par zalalus dans le forum Qt
    Réponses: 13
    Dernier message: 27/05/2009, 15h27

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