C ++ Qt多重定义

时间:2011-02-11 01:50:20

标签: c++ qt multiple-definition-error

我正在尝试使用MinGW编译器在Qt中使用C ++创建一个简单的GUI应用程序(到目前为止)。但是,编译器通知我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 。我正在使用支票来确保标题不会被多次包含,但显然它不起作用,我不知道为什么。

这是头文件:

#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();
}

最后,main.cpp:

{{1}}

7 个答案:

答案 0 :(得分:54)

我看到过这种情况发生在源文件在项目(.pro或.pri)文件中重复之前。检查项目文件中的所有“SOURCES =”和“SOURCES + =”行,并确保cpp文件不在那里多次。

答案 1 :(得分:2)

我不使用MinGW,但这听起来像链接器错误而不是编译器错误。如果是这种情况,那么您应该检查.CPP文件是否未添加到项目两次。我也注意到扩展名是“php”,这很不寻常,因为它应该是“cpp”。

答案 2 :(得分:1)

如果在不同文件夹中有两个同名的.ui文件,也会发生这种情况。它们相应的标头构建在同一目录中,导致一个被覆盖。至少那是我的问题。

答案 3 :(得分:0)

回答仅供参考:

我包括

#include myclass.cpp

而不是

#include myclass.h

答案 4 :(得分:0)

当我在插件文件中的信号标题下列出我的插槽声明而不是插槽1时,我收到此错误消息。对于遇到此错误消息的任何人来说,检查的另一件事是。

剪切和粘贴解决了问题,需要在下次手动创建插槽时进行检查。

答案 5 :(得分:0)

对我来说,这是由于Qt在Windows中使用MinGW的编译模型。

我的代码编译完全适用于Linux,但对于Windows,链接器错误发生在以下文件中:

Message.cpp
Util.cpp

首先,在.pro文件中,我找不到任何类似的文件名。然后敏锐地观察我发现,我正在编译的外部google protobuf库在其文件夹中有一些库文件命名为:

message.cc
util.cc

案例和扩展是不同的,但不知何故,它在Qt编译中造成混乱。我刚刚为这些库文件添加了一个下划线,并且工作正常。

答案 6 :(得分:0)

在我的情况下,这是由于在头文件中全局声明了该函数引起的。