C++ Qt Несколько определений
Я пытаюсь создать простое приложение GUI (пока) в Qt с C++, используя компилятор MinGW. Тем не менее, компилятор сообщает мне, что у меня есть multiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)'
на line 4
из wiimotescouter.cpp
, Я использую проверку, чтобы убедиться, что заголовок не включен несколько раз, но, очевидно, он не работает, и я не уверен, почему.
Вот заголовочный файл:
#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();
}
6 ответов
Я видел это раньше, когда исходный файл дублировался в файле проекта (.pro или.pri). Проверьте все строки "SOURCES =" и "SOURCES +=" в файле проекта и убедитесь, что файл cpp отсутствует там более одного раза.
Я не использую MinGW, но это звучит как ошибка компоновщика, а не ошибка компилятора. В этом случае вам следует убедиться, что файл.CPP не добавлен в проект дважды. Я также заметил, что расширение "php", это очень необычно, так как оно должно быть "cpp".
В моем случае это было вызвано тем, что функция была объявлена глобально в файле заголовка.
Ответ только для справки:
Я был в том числе
#include myclass.cpp
вместо
#include myclass.h
Это также может произойти, если у вас есть два файла.ui с одинаковым именем в разных папках. Их соответствующие заголовки встроены в один и тот же каталог, в результате чего один из них перезаписывается. По крайней мере, это была моя проблема.
Для меня это было связано с моделью компиляции Qt в Windows с использованием MinGW.
Мой код прекрасно скомпилирован для Linux, но для Windows ошибки компоновщика происходили для следующих файлов:
Message.cpp
Util.cpp
Сначала в файле.pro я не мог найти похожие имена файлов. Затем, внимательно наблюдая, я понял, что во внешней библиотеке protobuf Google, которую я компилировал, в ее папке были некоторые библиотечные файлы с именем:
message.cc
util.cc
Случаи и расширения были разными, но каким-то образом это создавало беспорядок в компиляции Qt. Я просто добавил подчеркивание к этим файлам библиотеки, и все работало нормально.
Я получил это сообщение об ошибке, когда мои объявления слотов были перечислены под заголовком сигналов в заголовочном файле, а не слотами. Еще одна вещь для тех, кто испытывает это сообщение об ошибке, чтобы проверить.
Вырезать и вставлять решил проблему и необходимость проверить в следующий раз, когда я создаю слоты вручную.