Вы должны объявить функцию inline
(или, в качестве альтернативы, переместить определение в одну единицу перевода).
Проблема, с которой вы сталкиваетесь, заключается в том, что если вы определите функцию в заголовке и включите этот заголовок в более чем одну единицу перевода, компилятор сгенерирует функцию в все единицы перевода.
Когда компоновщик пытается сгенерировать программу (или библиотеку), он обнаруживает, что функция определена несколько раз, и жалуется на это, поскольку это является нарушениемODR (одно определение правила).Помечая функцию как inline
, компилятор помечает эту функцию так, что, когда компоновщик видит множество определений, а не задыхается, он отбрасывает все определения, кроме одного.