Ошибка с перегрузкой шаблонной функции и определением вне класса - PullRequest
0 голосов
/ 12 февраля 2019

Я изучаю разработку игр, и в книге мне нужно перегрузить функцию шаблоном.исходная функция -

template <typename Resource, typename Identifier>
void ResourceHolder<Resource, Identifier>::load(Identifier id, const std::string& filename)
{}

, а перегруженная версия -

template <typename Resource, typename Identifier>
template <typename Parameter>
void ResourceHolder<Resource, Identifier>::load(Identifier id, const std::string& filename, const Parameter& secondParam)
{}

Когда я пытаюсь запустить код в основном с этим

ResourceHolder<sf::Texture, Textures::ID> textures;

, я получаю компиляциюошибка:

error: prototype for ‘void ResourceHolder<Resource, Identifier>::load(Identifier, const string&, const Parameter&)’ does not match any in class ‘ResourceHolder<Resource, Identifier>’
void ResourceHolder<Resource, Identifier>::load(Identifier id, const std::string& filename, const Parameter& secondParam)

Как это исправить?Спасибо.

1 Ответ

0 голосов
/ 12 февраля 2019

Вы забыли добавить объявление в своем классе:

template <typename Resource, typename Identifier>
struct ResourceHolder {
    // ...

    // member function must be in the class
    template<typename Parameter>
    void load(Identifier id, const std::string& filename, const Parameter& secondParam);
};
...