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 :

Macro Q_OBJECT et erreurs de link


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 25
    Points
    25
    Par défaut Macro Q_OBJECT et erreurs de link
    Bonjour.

    Dès que je veux employer la macro Q_OBJECT dans une de mes classes, j'ai immédiatement les erreurs de link suivantes à la compilation :

    main.obj : error LNK2001: symbole externe non résolu "public: virtual struct QMetaObject const * __cdecl Recepteur::metaObject(void)const " (?metaObject@Recepteur@@UBAPBUQMetaObject@@XZ)
    main.obj : error LNK2001: symbole externe non résolu "public: virtual void * __cdecl Recepteur::qt_metacast(char const *)" (?qt_metacast@Recepteur@@UAAPAXPBD@Z)
    main.obj : error LNK2001: symbole externe non résolu "public: virtual int __cdecl Recepteur::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Recepteur@@UAAHW4Call@QMetaObject@@HPAPAX@Z)

    Le même code se compile sans erreur sans la macro Q_OBJECT.

    Voici le code extrèmement simple de ma classe :

    class Recepteur : public QObject
    {
    Q_OBJECT

    public :

    Recepteur(){};

    public slots:
    void ButtonPushedReceived()
    {
    printf("Le bouton a été poussé");
    }
    };

    Merci d'avance pour vos réponses.

    Patrick Schevenels

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Pour utiliser la macro Q_OBJECT, qmake fait appel a moc.exe. Je t'invite à lire des infos sur les meta-objets.
    Pour résumer :
    qmake utilise très bien le moc et l'inclue au projet quand tu déclares ta classe (et la macro Q_OBJECT) dans un fichier.h. Si tu déclares directement ta classe dans un fichier .cpp, il faut ajouter le .moc toi même. Pour cela, en toute fin de ton fichier, tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "monfichier.moc"
    G.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    Comment fait tu pour compiler?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos réponses.

    Je compile avec un projet Visual Studio 2005 Pro. Ma version de Qt est la 4.4.0 Beta pour Windows CE.

    J'ai mis en pièce jointe un code très simple avec 2 classes séparées en fichiers .h et .cpp et un main dans lequel j'ai ces erreurs de link.

    Merci d'avance pour vos solutions.

    Patrick Schevenels
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Euh, je renvois à ce qu'a dit MonGaulois, comment fais tu pour compiler ?

    J'ai exactement ta config, sauf que j'utilises Qt4.3. J'ai copié ton .zip, je l'ai décompressé, je suis allé dans le dossier. J'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    qmake -project
    qmake
    nmake
    Aucune erreur de compilation. J'ai même pas ouvert ton code.
    Comment fais tu pour compiler ?

    G.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    J'ai simplement ouvert une solution Visual Studio d'exemple fournie avec Qt où il n'y avait qu'un main qui afichait une interface graphique et je suis parti de là en compilant avec Visual Studio.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Ok. Et bien, je te conseille de consulter la FAQ et les tutoriels de Qt présents sur ce site. Le plus simple est d'utiliser l'outil fourni avec Qt nommé "qmake" et qui te crée des makefile, que tu pourras utiliser ensuite avec nmake.

    Bonne lecture.

    G.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par pscheven Voir le message
    J'ai simplement ouvert une solution Visual Studio d'exemple fournie avec Qt où il n'y avait qu'un main qui afichait une interface graphique et je suis parti de là en compilant avec Visual Studio.
    Il faut que tu ajoute une compilation par moc sur les .h où tu as mis Q_OBJECT.
    Puis ajouter les fichier moc_xxx.cpp ainsi créé...

    Il faut mieux utiliser qmake tu n'aura plus se problème.

Discussions similaires

  1. erreur de link
    Par meli0207 dans le forum MFC
    Réponses: 6
    Dernier message: 04/05/2007, 10h17
  2. template et erreur de link
    Par Willand dans le forum Langage
    Réponses: 12
    Dernier message: 05/12/2006, 21h19
  3. erreur de link(age) g++
    Par corwin dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/05/2004, 11h33
  4. [wxWindows] Erreur de link pour ODBC
    Par ovh dans le forum wxWidgets
    Réponses: 3
    Dernier message: 28/01/2004, 15h38
  5. DirectDrawCreate erreur de link
    Par Ing_Ben dans le forum DirectX
    Réponses: 1
    Dernier message: 01/12/2002, 18h46

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