Включение охраны только защищает эту функцию от включения в один и тот же модуль перевода дважды. Но это не защитит эту функцию от включения в целую программу дважды.
Поскольку функция не является встроенной, она нарушает правило единого определения, если она встречается более одного раза во всей программе. Сделайте его встроенным, чтобы решить проблему, или поместите определение в файл реализации, поместив только его объявление в заголовок.
// Gets the maximum number of tracks displayable. possible fix:
inline utils::uint32 GetConstMaxSystemRange() {
return constMaxSystemNumber - constMinSystemNumber + 1;
}
На заметку - лучше не помещайте const во встроенное возвращаемое значение. Временные из них не могут быть квалифицированы как const / volatile. Но это также не обязательно: вы все равно не можете их изменить. Насколько я знаю, это игнорируется. Но это никогда не даст эффекта.