web-dev-qa-db-fra.com

Symboles externes non résolus - Créateur Qt

Il me manque un concept de base avec en-têtes et éléments inclus car lorsque j'essaie d'appeler la fonction la plus simple à partir d'un fichier source séparé, une erreur se produit:

main.obj: -1: erreur: LNK2019: symbole externe non résolu "void __cdecl buildDeck (int, int)" (? buildDeck @@ YAXHH @ Z) référencé dans la fonction _main

deck.h

#ifndef DECK_H
#define DECK_H
#include <QString>


void buildDeck(int deckSize, int jokers);


struct card
{
    QString suit;
    QString color;
    int rank;
};

#endif // DECK_H

deck.cpp

#include"mainwindow.h"
#include "deck.h"

void buildDeck(int deckSize, int jokers)
{
    int blackRed = deckSize-=jokers;
}

main.cpp

#include "mainwindow.h"
#include "deck.h"
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    buildDeck(10,20);

    return a.exec();
}

Et cela me donne une erreur. Cependant, si je déplace la définition de la fonction de deck.cpp vers le bas de main.cpp, l’application se créera.

Tous les fichiers sont inclus dans le même projet et stockés dans le même répertoire.

Autres fichiers:

.profil

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = carddeck
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    deck.cpp

HEADERS  += mainwindow.h \
    deck.h

FORMS    += mainwindow.ui

je ne sais pas si vous en avez besoin, mais voici mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QTextEdit>
#include <QCheckBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void runButtonClicked();

private:
    Ui::MainWindow *ui;
    QPushButton *runButton;
    QTextEdit * runText;

    QCheckBox * betHearts;
    QCheckBox * betDiamonds ;
    QCheckBox * betClubs;
    QCheckBox * betSpades ;
    QCheckBox * betFlush ;
    QCheckBox * betAllRed;
    QCheckBox * betAllBlack ;

};

#endif // MAINWINDOW_H
25
chuckieDub

Il semble que le fichier Make n'a pas été régénéré lorsque vous avez modifié le fichier .pro . Exécutez qmake et essayez à nouveau . Vous pouvez également vérifier si le fichier deck.cpp est compilé ou non; y a-t-il un deck.o dans le répertoire de construction?

73
benjarobin

oui, le fichier Makefile n’est pas mis à jour pendant le changement de fichier .pro. Donc, vous devez exécuter qmake.

Suivez ces étapes:

  • Faites un clic droit sur le menu projet Nettoyer/Construire -> Nettoyer tout
  • Faites un clic droit sur le projet Lancer le menu qmake/Build -> runQmake
  • Faites un clic droit sur le menu Projet/Construire du projet -> Construire

Conseils Pro:

Je ne sais pas mais parfois Qt ne met pas à jour Makefile. donc je le recommande à tous chaque fois que vous ajoutez/supprimez une ressource dans un projet ou si des modifications se produisent dans votre fichier .pro, exécutez simplement qmake et construisez votre projet (Exécuter qmake manuellement pour mettre à jour le chemin du projet, ce qui aide à trouver la fenêtre principale. fichier .obj).

0