многократно определенный символ

Я бы не сказал, что я новичок в C++(17), но эта ошибка меня совсем ввела в ступор. Я пишу для себя расширитель возможностей SFML, и создал для этого "Extension/SFML_Vector.hpp", в нём у меня содержатся шаблоны функций, например одна из них:

// Extension/SFML_Vector.hpp
template<typename T>
T scalarMultiplication(const sf::Vector2<T>& a, const sf::Vector2<T>& b) {
    return a.x * b.x + a.y * b.y;
}

Но когда я пытаюсь в этом же файле определить просто функцию (не шаблон), мне компилятор выдаёт ошибку об многократном определённом символе (функции):

float vector2Length(const sf::Vector2f& a) {
    return sqrtf(a.x * a.x + a.y * a.y);
}

Скажите пожалуйста, почему компилятор не хочет это компилировать?


Ответы (1 шт):

Автор решения: Harry

Потому что в заголовочном файле вы дали определение обычной функции, что привело к созданию ее кода в каждом файле реализации, куда включен этот заголовочный файл.

Варианты решения:

  1. Добавьте ключевое слово inline к определению функции.

  2. Оставьте в заголовочном файле только объявление, а определение вынесите в файл реализации (.cpp-файл).

→ Ссылка