Tengo muy poca idea de lo que ocurre con las plantillas C++, pero estoy intentando implementar una función que busque un elemento que satisfaga una propiedad determinada (en este caso, buscar) para uno con el nombre dado). Mi declaración en mi archivo .h es el siguiente:El problema de la plantilla provoca un error del enlazador (C++)
template <typename T>
T* find_name(std::vector<T*> v, std::string name);
Cuando compilar, obtengo este error de vinculador cuando llamo a la función:
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> >)" ([email protected]@@@@[email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@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> >)" ([email protected]@@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z) place.obj Program2
Una vez más, soy nuevo en las plantillas por lo que no sé lo que está pasando. Todas las instancias que he encontrado de LNK2019 a través de Google han consistido en no utilizar las bibliotecas correctas, pero dado que esta es mi propia función, no veo por qué sucedería esto.
Además, una pregunta relacionada: ¿Hay alguna manera de hacer un parámetro de plantilla para que tenga que ser una subclase de una cierta clase, es decir, una plantilla?
¿qué compilador estás usando? algunos compiladores evitan que separe la declaración y la definición en archivos separados para las plantillas. – Jordan
¿Escribiste realmente una implementación para tu función de plantilla? – begray
También puede considerar usar std :: find o std :: find_if –