2011-02-11 12 views
8

Próbuję utworzyć prostą aplikację GUI (do tej pory) w Qt z C++ za pomocą kompilatora MinGW. Jednak kompilator informuje mnie, że mam multiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)' na line 4 z wiimotescouter.cpp. Używam czeku, aby upewnić się, że nagłówek nie jest dołączany wiele razy, ale najwyraźniej nie działa i nie jestem pewien dlaczego.C++ Qt Wiele definicji

Oto nagłówek pliku:

#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 

A oto plik 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")); 
} 

Wreszcie 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

To brzmi bardziej jak błąd łącznika zamiast kompilatora. Czy masz więcej niż jeden plik .cpp w pliku .pro? Pomocne byłoby również wysłanie kompletnego komunikatu o błędzie. –

+2

Dlaczego twój projekt C++ ma.pliki php w nim? 0_o –

+0

Mój błąd to kopiowanie tutaj, to jest .cpp, jestem przyzwyczajony do pracy z PHP. ;) –

Odpowiedz

36

Widziałem to wcześniej, gdy plik źródłowy został zduplikowany w pliku projektu (.pro lub .pri). Sprawdź wszystkie linie "SOURCES =" i "SOURCES + =" w pliku projektu i upewnij się, że pliku cpp nie ma więcej niż jeden raz.

2

nie używam, ale MinGW to brzmi jak błąd linkera, a nie błąd kompilatora. W takim przypadku należy sprawdzić, czy plik .CPP nie został dwukrotnie dodany do projektu. Zauważyłem też, że rozszerzenie to "php", jest to bardzo nietypowe, ponieważ powinno być "cpp".

0

Answer tylko dla odniesienia:

byłem tym

#include myclass.cpp 

zamiast

#include myclass.h 
0

To również może się zdarzyć, jeśli masz dwie .ui pliki o tej samej nazwie w różnych folderach . Odpowiednie nagłówki są zbudowane w tym samym katalogu, co powoduje, że jeden z nich jest nadpisywany. Przynajmniej to był mój problem.

0

Ten komunikat o błędzie pojawił się, gdy pod nagłówkiem sygnałów w pliku nagłówkowym wymieniono deklaracje slotów, a nie gniazda. Kolejna rzecz dla każdego, kto ma ten komunikat o błędzie, aby sprawdzić.

Wycinanie i wklejanie rozwiązało problem i należy sprawdzić, kiedy następnym razem będę tworzyć gniazda ręcznie.

0

Dla mnie było to spowodowane modelem kompilacji Qt w Windows przy użyciu MinGW.

Mój kod skompilowany perfekcyjnie dla Linuksa, ale dla Windows błędy łącznikowe były dzieje się z następujących plików:

Message.cpp 
Util.cpp 

Początkowo w pliku .pro, nie mogłem znaleźć żadnych podobnych nazwach plików. Następnie obserwując, dotkliwie zorientowali się, że zewnętrzne biblioteki google protobuf, który miałem kompilacji wzdłuż, miał pewne pliki bibliotek wewnątrz folderu o nazwie jak:

message.cc 
util.cc 

przypadkach i rozszerzenia były różne, ale jakoś stworzył bałagan w kompilacji Qt. Właśnie dodałem podkreślenie do tych plików biblioteki i wszystko działało dobrze.