Non ho idea di cosa stia succedendo nei modelli C++, ma sto cercando di implementare una funzione che cerca un vettore per un elemento che soddisfa una determinata proprietà (in questo caso, la ricerca per uno con il nome dato). La mia dichiarazione nel mio file h è la seguente:Il problema del modello causa l'errore del linker (C++)
template <typename T>
T* find_name(std::vector<T*> v, std::string name);
Quando compilo, ottengo questo errore linker quando chiamo la funzione:
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
Ancora una volta, Sono nuovo di modelli in modo che non so cosa sta succedendo Tutte le istanze che ho trovato di LNK2019 tramite Google hanno riguardato il non utilizzo delle librerie corrette, ma poiché questa è la mia funzione, non vedo perché ciò accadrebbe.
Inoltre, una domanda correlata: esiste un modo per creare un parametro di modello in modo che debba essere una sottoclasse di una determinata classe, ovvero il modello?
quale compilatore stai utilizzando? alcuni compilatori ti impediscono di separare la dichiarazione e la definizione in file separati per i modelli. – Jordan
Hai davvero scritto un'implementazione per la tua funzione template? – begray
Si può anche prendere in considerazione l'utilizzo di std :: find o std :: find_if –