GCC似乎在抱怨一个函数的多个定义。我收到两个都指向同一行的错误:
arControls.cpp:5: error: multiple definition of `arControls::arControls(QCheckBox*, QSpinBox*, QSpinBox*)'
arcontrols.h:
#pragma once
#include <QObject>
class QCheckBox;
class QSpinBox;
class arControls: public QObject
{
Q_OBJECT
public:
arControls(void) = delete;
arControls(QCheckBox* arCB,
QSpinBox* sb1,
QSpinBox* sb2);
protected:
QCheckBox* _arCB;
QSpinBox* _sb1;
QSpinBox* _sb2;
};
arcontrols.cpp:
#include "arControls.h"
arControls::arControls(QCheckBox* arCB,
QSpinBox* sb1,
QSpinBox* sb2)
{
//Populate pointers
_arCB = arCB;
_sb1 = sb1;
_sb2 = sb2;
}
这种情况似乎与others不同。我没有将实现放在标题中,也没有在代码中的其他地方包括实现。
该标头仅包含两次。一旦实施。
使用gcc编译器的QT设计器。
答案 0 :(得分:0)
正如一些评论者提到的那样,看来这种问题通常是由于尝试将同一文件两次编译而引起的。
包括实现(.cpp)文件是执行此操作的快速方法。
另一种将文件编译两次的方法是将文件两次包含在项目中,这就是产生此问题的原因。它以一种偷偷摸摸的方式发生,而这种情况在IDE中没有出现,在本例中为QT Creator。
在这种情况下,创建了问题中所示的arControls.h和arControls.cpp,然后通过使用图形IDE将其显式添加到项目中,方法是右键单击该文件夹,然后选择“添加现有文件”。该文件按预期显示在树中。以这种方式添加文件具有编辑项目文件的效果。 IDE找到了一个SOURCES实例,并添加到显式添加的文件上:
SOURCES += $$COMMON/status/explicitfile1.cpp \
$$COMMON/status/explicitfile2.cpp \
$$COMMON/status/explicitfile3.cpp \
../src/arControls.cpp
在项目文件的其他地方,我们找到以下行:
SRC = $$ROOT/src
INCLUDEPATH += $$SRC
HEADERS += $$SRC/*.h
SOURCES += $$SRC/*.cpp
早期的开发人员在项目文件中使用通配符将src文件夹中的所有文件包括在内。手动添加时,添加的文件未在IDE中显示,并且IDE从未出现过提示该文件已两次添加到项目中的提示。 在源树中只有一个副本可见。