2011-02-11 6 views
8

Я пытаюсь создать простое приложение GUI (до сих пор) в Qt с C++ с использованием компилятора MinGW. Однако компилятор сообщает мне, что у меня есть multiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)' на line 4wiimotescouter.cpp. Я использую проверку, чтобы заголовок не включался несколько раз, но, видимо, он не работает, и я не уверен, почему.C++ Qt Несколько определений

Вот заголовок файла:

#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 

А вот файл 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")); 
} 

Наконец, 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

Это больше похоже на ошибку компоновщика вместо компилятора. У вас есть более одного файла .cpp в вашем файле .pro? И публикация полного сообщения об ошибке также поможет. –

+2

Почему у вас есть проект на C++.php-файлы в нем? 0_o –

+0

Моя ошибка, копируя его здесь, это .cpp, я привык работать с PHP. ;) –

ответ

36

Я видел это раньше, когда исходный файл дублируется в файле проекта (.pro или .pri). Проверьте все строки «SOURCES =» и «SOURCES + =» в файле проекта и убедитесь, что файл cpp не находится там более одного раза.

2

Я не использую MinGW, но это звучит скорее как ошибка компоновщика, а не ошибка компилятора. Если это так, то вы должны проверить, что .CPP-файл не добавляется в проект дважды. Я также заметил, что расширение является «php», это очень необычно, так как это должно быть «cpp».

0

Ответ только для справки:

я в том числе

#include myclass.cpp 

вместо

#include myclass.h 
0

Это также может произойти, если у вас есть два .ui файлы с одинаковыми именами в разных папках , Их соответствующие заголовки построены в том же каталоге, в результате чего один будет перезаписан. По крайней мере, это была моя проблема.

0

Я получил это сообщение об ошибке, когда у меня появились объявления слотов, перечисленные в заголовке сигналов в заголовочном файле, а не в слотах. Другое дело для тех, кто испытывает это сообщение об ошибке для проверки.

Вырезать и вставить решет проблему и необходимо проверить в следующий раз, когда я создаю слоты вручную.

0

Для меня это было связано с моделью компиляции Qt в Windows с использованием MinGW.

Мой код компилируется прекрасно для Linux, но и для Windows, ошибки компоновщика творились для следующих файлов:

Message.cpp 
Util.cpp 

На первом, в файле .pro, я не мог найти похожие имена файлов. Тогда наблюдающий остро я понял, что, внешний Google Protobuf библиотека, которую я компиляция вместе, была некоторые библиотечные файлы внутри его папки с именем как:

message.cc 
util.cc 

случаев и расширения были разные, но так или иначе он создал беспорядок в компиляции Qt. Я просто добавил подчёркивание к этим библиотечным файлам, и все было хорошо.

Смежные вопросы