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 :

Erreur lors de l'édition des liens


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Erreur lors de l'édition des liens
    Bonjour à tous,

    Je débute en programmation C++/Qt et je souhaiterai faire un programme dans lequel je lui communique le numéro du port COM (via une SpinBox) sur lequel mon périphérique est connecté (périphérique que j'ai fabriqué moi-même) et afficher dans un affichage du type QLCDNumber les 4 valeurs entières que va me retourner mon périphérique.

    Pour la communication via le port COM j'ai pour l'instant pas trop de problèmes puisque j'ai utilisé des sources téléchargées sur le net mais j'ai créé l'interface moi même.

    J'ai utilisé la méthode expliquée dans mon livre qui consistait à créer la classe et le constructeur de ma fenêtre principale (dérivée de QMainWindow) dans un fichier .cpp et de créer l'appel de cette fenêtre dans un autre fichier .cpp (appel du style MainWindow mainwin) et de faire un show() de mainwin.

    Cela dit une erreur lors de l'édition de lien m'empêche de terminer mon programme, les voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ||=== ArcSoft0.1, Debug ===|
    obj\Debug\mainwindow.o||In function `_ZN10MainWindowC2Ev':|
    mainwindow.cpp|12|undefined reference to `vtable for MainWindow'|
    mainwindow.cpp|12|undefined reference to `vtable for MainWindow'|
    obj\Debug\mainwindow.o||In function `_ZN10MainWindowC1Ev':|
    mainwindow.cpp|12|undefined reference to `vtable for MainWindow'|
    mainwindow.cpp|12|undefined reference to `vtable for MainWindow'|
    obj\Debug\main.o||In function `_ZN7QWidget4showEv':|
    main.cpp:(.text$_ZN10MainWindowD1Ev[MainWindow::~MainWindow()]+0xb)||undefined reference to `vtable for MainWindow'|
    ||=== Build finished: 5 errors, 0 warnings ===|
    Avez vous une idée d'où cette erreur peur provenir ?

    S'il le faut je pourrai poster la partie du code en question.

    A noter aussi que l'erreur m'est signalée à la ligne 12 : celle comportant seulement l'accolade d'ouverture de la définition du constructeur MainWindow

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 663
    Points : 188 668
    Points
    188 668
    Par défaut
    Salut,

    La FAQ nous indique que cela est dû au fait que ton fichier ne passe pas par le moc.

    Utilises-tu qmake pour compiler ton projet ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'utilise GNU GCC Compiler dans Code::Blocks.
    Sinon j'avais zappé cette partie de la FAQ, désolé.

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 663
    Points : 188 668
    Points
    188 668
    Par défaut
    Il ne faut pas balancer le tout directement à GCC.

    Qt est un framework, avec des parties tout à fait non standard : les signaux, les slots, l'introspection... Tout ceci n'est donc pas géré par le compilateur : il faut faire passer ces fichiers au moc, un outil qui s'arrange pour que le compilateur accepte ces fichiers.

    Il est assez fou de faire passer ses fichiers manuellement au moc : Qt propose donc un bel outil, qmake, qui se charge de créer des makefiles appropriés.

    Pour l'utiliser la première fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    qmake -project
    qmake 
    make
    La première commande crée un fichier de projet (repertoire.pro).
    La deuxième crée les Makefiles (Makefile, Makefile.debug, Makefile.reelase).
    La troisième lance la compilation.

    Tout ceci se fait en ligne de commande, je ne connais pas de moyen d'automatisation pour Code::Blocks.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai recréé mon projet proprement sur Qt Creator pour corriger le problème précédent mais lors de la compilation j'ai une erreur que je n'avais pas auparavant au niveau de la définition du HANDLE hcom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char NomPort[4+1];
            int NoPort;
            HANDLE hCom;
            NoPort = port;
     
            sprintf(NomPort,"COM%d",NoPort);
            hCom=CreateFile(NomPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING ,0,NULL);
    Le compilateur me signale une erreur de conversion de char* vers const WCHAR* lors de l'utilisation de NomPort dans CreateFile.
    Je ne comprends pas parce que la conversion sous GCC n'avait pas l'air de le déranger.

  6. #6
    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
    QtCreator utilise gcc également. Si tu n'avais pas l'erreur avant, c'est sans doute parce qu'une autre erreur la masquait.

    Sinon, concernant la conversion char / wchar, la FAQ C++ doit répondre à ta question.

    Bonne chance,

    G.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2007, 11h29
  2. Réponses: 0
    Dernier message: 20/07/2007, 13h40
  3. Erreur édition des liens
    Par vinzzzz dans le forum Fortran
    Réponses: 7
    Dernier message: 18/04/2007, 16h10
  4. Erreur à l'édition des liens en mode release
    Par Deydey dans le forum Visual C++
    Réponses: 3
    Dernier message: 16/04/2007, 14h56
  5. [VC++] Erreur d'édition des liens LNK1143
    Par Yellowmat dans le forum MFC
    Réponses: 6
    Dernier message: 01/02/2006, 15h00

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