C ++ Qt Несколько определений - PullRequest
12 голосов
/ 11 февраля 2011

Я пытаюсь создать простое приложение 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 ]

55 голосов
/ 11 февраля 2011

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

2 голосов
/ 11 февраля 2011

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

1 голос
/ 11 мая 2015

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

0 голосов
/ 08 июня 2017

Для меня это произошло из-за модели компиляции Qt в Windows с использованием MinGW.

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

Message.cpp
Util.cpp

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

message.cc
util.cc

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

0 голосов
/ 16 февраля 2016

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

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

0 голосов
/ 06 августа 2013

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

Я включил

#include myclass.cpp

вместо

#include myclass.h
...