Либо вы объявляете sort
как шаблонную функцию с одним аргументом шаблона (Compare
) внутри класса.Тогда ваше определение должно выглядеть следующим образом:
template <typename T>
template <typename Compare>
void List<T>::sort(const Compare& comparer) {
…
}
И вам также необходимо удалить теперь избыточное объявление friend class Compare
из вашего List
класса.
или вы сохраняете Compare
и sort
как есть.В этом случае просто не используйте sort
в качестве шаблона и пропустите аргумент шаблона Compare
:
template <typename T>
void List<T>::sort(const Compare& comparer) {
…
}
Конечно, это работает, только если вы определили (не просто объявил!) класс Compare
перед этой функцией.
Но это второе решение было бы крайне неортодоксальным и довольно бесполезным, поскольку аргумент compare
не имеет большого смысла: есть только один Compare
класс, и пользователь не может изменить его.Обычно это должно быть аргументом шаблона (первое решение).