2011-02-11 14 views
8

Sto provando a creare una semplice applicazione GUI (finora) in Qt con C++ usando il compilatore MinGW. Tuttavia, il compilatore mi informa che ho un multiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)' su line 4 di wiimotescouter.cpp. Sto usando un assegno per assicurarmi che l'intestazione non sia inclusa più volte, ma a quanto pare non funziona, e non sono sicuro del perché.Definizioni multiple di C++ Qt

Ecco il file di intestazione:

#ifndef WIIMOTESCOUTER_H 
#define WIIMOTESCOUTER_H 

#include <QWidget> 

class QLabel; 
class QLineEdit; 
class QTextEdit; 

class WiimoteScouter : public QWidget 
{ 
    Q_OBJECT 

public: 
    WiimoteScouter(QWidget *parent = 0); 

private: 
    QLineEdit *eventLine; 
}; 

#endif // WIIMOTESCOUTER_H 

Ed ecco il file cpp:

#include <QtGui> 
#include "wiimotescouter.h" 

WiimoteScouter::WiimoteScouter(QWidget *parent) : 
    QWidget(parent) 
{ 
    QLabel *eventLabel = new QLabel(tr("Event:")); 
    eventLine = new QLineEdit; 

    QGridLayout *mainLayout = new QGridLayout; 
    mainLayout->addWidget(eventLabel, 0, 0); 
    mainLayout->addWidget(eventLine, 0, 1); 

    setLayout(mainLayout); 
    setWindowTitle(tr("Wiimote Alliance Scouter")); 
} 

Infine, il main.cpp:

#include <QtGui> 
#include "wiimotescouter.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    WiimoteScouter wiimoteScouter; 
    wiimoteScouter.show(); 

    return app.exec(); 
} 
+1

Sembra più un errore di linker che uno di compilatore. Hai più di un file .cpp nel tuo file .pro? E anche l'invio del messaggio di errore completo. –

+2

Perché il tuo progetto C++ ha.file php in esso? 0_o –

+0

Il mio errore è copiarlo qui, è un .cpp, sono abituato a lavorare con PHP. ;) –

risposta

36

Ho visto succedere prima quando un file sorgente è stato duplicato nel file di progetto (.pro o .pri). Controlla tutte le linee "SOURCES =" e "SOURCES + =" nel tuo file di progetto e assicurati che il file cpp non ci sia più di una volta.

2

Io non uso MinGW, ma sembra un errore del linker piuttosto che un errore del compilatore. In tal caso, verificare che il file .CPP non venga aggiunto al progetto due volte. Ho anche notato che l'estensione è "php", questo è molto insolito in quanto dovrebbe essere "cpp".

0

risposta appena per riferimento:

ero includo

#include myclass.cpp 

invece di

#include myclass.h 
0

Questo può succedere anche se si dispone di due file .ui con lo stesso nome in cartelle diverse . Le intestazioni corrispondenti sono costruite nella stessa directory, risultando in una sovrascrittura. Almeno quello era il mio problema.

0

Ho ricevuto questo messaggio di errore quando avevo elencato le dichiarazioni di slot elencate sotto l'intestazione dei segnali nel file di intestazione, piuttosto che quella degli slot. Un'altra cosa per chiunque abbia riscontrato questo messaggio di errore da verificare.

Taglia e incolla ha risolto il problema e la necessità di verificare la prossima volta che creo gli slot manualmente.

0

Per me era dovuto al modello di compilazione di Qt in Windows che utilizza MinGW.

Il mio codice compilato perfettamente bene per Linux, ma per Windows gli errori di linker stesse accadendo per i seguenti file:

Message.cpp 
Util.cpp 

In un primo momento, nel file .pro, non riuscivo a trovare tutti i nomi di file simili. Poi osservando acutamente ho capito che, la biblioteca google protobuf esterno, che mi stava compilando lungo, ha avuto alcuni file di libreria all'interno della sua cartella denominata come:

message.cc 
util.cc 

I casi e le estensioni erano diversi, ma in qualche modo creato confusione nella compilazione Qt. Ho appena aggiunto un trattino basso a quei file di libreria e le cose hanno funzionato bene.