首页 文章

同一行上有多个定义错误

提问于
浏览
-4

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 回答

  • 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从未提示文件已添加到项目中两次 . Only one copy was visible in the source tree .

相关问题