2012-12-28 24 views
20

Ich muss ein Grundkonzept mit Header fehlt und schließt, denn wenn ich selbst die einfachsten einer Funktion aus einer separaten Quelldatei ich einen Fehler zu nennen versuchen:Ungelöste externe Symbole - Qt Creator

main.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl buildDeck(int,int)" ([email protected]@[email protected]) referenced in function _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(); 
} 

Und das gibt mir einen Fehler. Wenn ich jedoch die Funktionsdefinition von deck.cpp an den unteren Rand von main.cpp verschiebe, wird die Anwendung erstellt.

Alle Dateien sind im selben Projekt enthalten und werden im selben Verzeichnis gespeichert.

Andere Dateien:

.proDatei

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 

nicht sicher, ob Sie es brauchen, aber hier ist 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

Also, was ist das ungelöste Symbol aus dem Kompilierungsprotokoll, das Sie bekommen? – Archie

+0

main.obj: -1: Fehler: LNK2019: nicht aufgelöstes externes Symbol "void __cdecl buildDeck (int, int)" (? BuildDeck @@ YAXHH @ Z) in Funktion _main referenziert – chuckieDub

+0

Probieren Sie Ihren Code aus. Das einzige, was ich bekomme, ist eine Warnung über ungenutzte blackRed Variable. Keine Verknüpfungsfehler Versuchen Sie, den Build zu säubern und qmake erneut auszuführen. – Archie

Antwort

59

Es sieht aus wie das Makefile nicht regeneriert, wenn Sie bearbeitet die .pro-Datei. Führen Sie qmake aus und versuchen Sie es erneut. Sie können auch überprüfen, ob die deck.cpp kompiliert ist oder nicht; Gibt es ein Deck.o im Build-Verzeichnis?

+1

Ich denke, das wird auch das Prolem lösen. aber er muss zuerst reinigen, um sicher zu sein. – UmNyobe

+0

danke, sauber und qmake löste das Problem. – chuckieDub

+0

+1 @benjarobin, Nach der Förderung eines Widgets zu meiner eigenen Klasse, dann die Zurückstufung dann Förderung es wieder, ich habe immer ungelösten externen Fehler erhalten und konnte es nicht loswerden. Aus VC++ -Hintergrund kommend dachte ich nur ein sauberes und umgebautes würde es aber keine Freude machen. Das hat mein Problem gelöst. Danke vielmals. – Rich