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