2012-12-28 19 views
20

Devo mancare un concetto di base con le intestazioni e comprende perché quando tento di chiamare anche il più semplice di una funzione da un file sorgente separata ottengo un errore:irrisolte simboli esterni - creatore Qt

main.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl buildDeck(int,int)" ([email protected]@[email protected]) referenced in function _main

ponte .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(); 
} 

E questo mi dà un errore. Tuttavia, se sposto la definizione della funzione da deck.cpp alla fine di main.cpp, l'applicazione verrà creata.

Tutti i file sono inclusi nello stesso progetto e memorizzati nella stessa directory.

Altri file:

di file .pro

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 

non è sicuro se ne avete bisogno, ma ecco 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 
+0

Quindi, qual è il simbolo non risolto dal registro della compilazione ottenuto? – Archie

+0

main.obj: -1: errore: LNK2019: simbolo esterno non risolto "void __cdecl buildDeck (int, int)" (? BuildDeck @@ YAXHH @ Z) a cui si fa riferimento nella funzione _main – chuckieDub

+0

Ho appena provato il codice. L'unica cosa che ottengo è un avvertimento sulla variabile blackRed inutilizzata. Nessun errore di collegamento. Prova a pulire la build e riesegui qmake. – Archie

risposta

59

Sembra che il Makefile non è stato rigenerato quando si modificato il file .pro. Esegui qmake e riprova. Si può anche verificare se il deck.cpp è compilato o meno; c'è un deck.o nella directory di costruzione?

+1

Penso che questo risolva anche il prolem. ma ha bisogno di pulire prima solo per essere sicuro. – UmNyobe

+0

grazie, pulito e qmake ha risolto il problema. – chuckieDub

+0

+1 @benjarobin, Dopo aver promosso un widget per la mia classe, quindi retrocedendolo e promuovendolo di nuovo, continuavo a ricevere un errore esterno non risolto e non riuscivo a liberarmene. Venendo dallo sfondo VC++, ho pensato che sarebbe stato pulito e ricostruito, ma senza gioia. Questo ha risolto il mio problema. Grazie molto. – Rich

Problemi correlati