Как отмечают некоторые из комментаторов, такая проблема чаще всего возникает из-за попытки дважды скомпилировать один и тот же файл.
Включение файла реализации (.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 никогда не появлялось намека на то, что файл был добавлен в проект дважды. В исходном дереве была видна только одна копия .