Я очень мало представляю, что происходит с шаблонами C ++, но я пытаюсь реализовать функцию, которая ищет вектор для элемента, удовлетворяющего заданному свойству (в данном случае, поиск элемента с заданным именем). Моя декларация в моем .h файле выглядит следующим образом:
template <typename T>
T* find_name(std::vector<T*> v, std::string name);
Когда я компилирую, я получаю эту ошибку компоновщика при вызове функции:
Error 1 error LNK2019: unresolved external symbol "class Item * __cdecl find_name<class Item>(class std::vector<class Item *,class std::allocator<class Item *> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??$find_name@VItem@@@@YAPAVItem@@V?$vector@PAVItem@@V?$allocator@PAVItem@@@std@@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z) referenced in function "public: class Item * __thiscall Place::get_item(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?get_item@Place@@QAEPAVItem@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) place.obj Program2
Опять же, я новичок в шаблонах, поэтому я не знаю, что происходит. Все случаи, когда я обнаружил LNK2019 через Google, были о том, что я не использовал правильные библиотеки, но так как это моя собственная функция, я не понимаю, почему это произошло.
Кроме того, связанный вопрос: есть ли способ сделать параметр шаблона таким, чтобы он был подклассом определенного класса, то есть шаблона?