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不同 . 我没有将实现放入标头或代码中的其他地方包含实现 .
Headers 仅包含两次 . 一旦实施 .
QT Designer使用gcc编译器 .
1 回答
正如一些评论家提到的那样,这种问题通常是由于尝试两次编译同一个文件而引起的 .
包含实现(.cpp)文件是一种快速执行此操作的方法 .
另一种两次编译文件的方法是在项目中包含两次,这就是创建这个问题的方法 . 它以一种偷偷摸摸的方式发生,在IDE中没有显示,在这种情况下,QT Creator .
在这种情况下,创建问题中显示的arControls.h和arControls.cpp,然后通过右键单击文件夹然后选择“添加现有文件”,使用图形IDE将其显式添加到项目中 . 该文件按预期显示在树中 . 以这种方式添加文件具有编辑项目文件的效果 . IDE找到了SOURCES的一个实例并添加了明确添加的文件:
查看项目文件中的其他位置,我们找到以下行:
早期的开发人员在项目文件中使用通配符来包含src文件夹中的所有文件 . 添加的文件在手动添加时未显示在IDE中,并且IDE从未提示文件已添加到项目中两次 . Only one copy was visible in the source tree .