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-файлы с одинаковым именем в разных папках. Их соответствующие заголовки создаются в одном каталоге, в результате чего один из них перезаписывается. По крайней мере это была моя проблема.


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

Я был в том числе

#include myclass.cpp

вместо

#include myclass.h

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

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


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

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

Message.cpp
Util.cpp

во-первых, в.pro file, я не смог найти похожих имен файлов. Затем, внимательно наблюдая, я выяснил, что внешняя библиотека Google protobuf, которую я компилировал, имела некоторые библиотечные файлы внутри своей папки с именем:

message.cc
util.cc

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