C++ Qt 多重定义

问题描述 投票:0回答:8

我正在尝试使用 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

这是 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();
}
c++ qt multiple-definition-error
8个回答
68
投票

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


2
投票

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


1
投票

答案仅供参考:

我包括了

#include myclass.cpp

而不是

#include myclass.h

1
投票

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


1
投票

在我的例子中,这是由于在头文件中全局声明函数而导致的。


0
投票

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

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


0
投票

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

我的代码在 Linux 上编译得很好,但对于 Windows,以下文件发生了链接器错误:

Message.cpp
Util.cpp

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

message.cc
util.cc

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


0
投票

我正在为同样的错误而苦苦挣扎。就我而言,错误在于我在“信号”下声明了该方法,而必须在“槽”下声明它。

© www.soinside.com 2019 - 2024. All rights reserved.