C++;Qt多重定义 我试图用C++使用明文编译器在Qt中创建一个简单的GUI应用程序(到目前为止)。但是,编译器告诉我,我在WiimoteScouter.cpp的第4行有一个关于“WiimoteScouter::WiimoteScouter(QWidget*)”的多个定义。我正在使用一个检查,以确保标题没有包括多次,但显然它不工作,我不知道为什么

C++;Qt多重定义 我试图用C++使用明文编译器在Qt中创建一个简单的GUI应用程序(到目前为止)。但是,编译器告诉我,我在WiimoteScouter.cpp的第4行有一个关于“WiimoteScouter::WiimoteScouter(QWidget*)”的多个定义。我正在使用一个检查,以确保标题没有包括多次,但显然它不工作,我不知道为什么,c++,qt,multiple-definition-error,C++,Qt,Multiple Definition Error,下面是头文件: #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:

下面是头文件:

#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
\ifndef WIIMOTESCOUTER\u H
#定义WIIMOTESCOUTER_H
#包括
类QLabel;
类QLineEdit;
类QTextEdit;
WiimoteScotter类:公共QWidget
{
Q_对象
公众:
WiimoteScotter(QWidget*parent=0);
私人:
QLineEdit*事件行;
};
#endif//WIIMOTESCOUTER\u 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"));
}
#包括
#包括“wiimotescouter.h”
WiimoteScotter::WiimoteScotter(QWidget*父项):
QWidget(父级)
{
QLabel*eventLabel=新的QLabel(tr(“事件:”);
eventLine=新的QLineEdit;
QGridLayout*mainLayout=新的QGridLayout;
mainLayout->addWidget(事件标签,0,0);
mainLayout->addWidget(事件行,0,1);
设置布局(主布局);
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();
}
#包括
#包括“wiimotescouter.h”
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
WiimoteScouter WiimoteScouter;
wiimoteScouter.show();
返回app.exec();
}

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

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

回答仅供参考:

我包括

#include myclass.cpp
而不是

#include myclass.h

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

当我将插槽声明列在头文件的信号标题下而不是插槽标题下时,我收到了此错误消息。遇到此错误消息的任何人都需要检查另一件事


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

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

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

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

message.cc
util.cc

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

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

这听起来更像是链接器错误,而不是编译器错误。在.pro文件中是否有多个.cpp文件?并且发布完整的错误消息也会有帮助。为什么C++项目中有PHP文件呢?0_错误地将它复制到这里,它是一个.cpp,我习惯于使用PHP还有其他可行的解决方案吗?我试了所有能找到的衣服,但没有一件适合我