我有一个简单的函数设置来检查值是否在 std::vector 中,并且我想使用“模板”来将函数与所有类一起使用。
一些定义
std::vector<ItemID_t> *spareItems;
ItemID_t newItem;//note this is an enumeration value
如果我用
bool b = !vectorContains(*spareItems,newItem);
功能看起来像
bool vectorContains(std::vector<ItemID_t> &vector,const ItemID_t& value){
return std::find(vector.begin(), vector.end(), value)!=vector.end();
}
但是如果我尝试通过调用实现泛型
bool b = !vectorContains<ItemID_t>(*spareItems,newItem);
和函数定义
template <class T>
bool vectorContains(std::vector<T> &vector,const T& value){
return std::find(vector.begin(), vector.end(), value)!=vector.end();
}
它在第二个示例中失败并给了我这个链接器错误
error LNK2019: unresolved external symbol "bool __cdecl turtle::vectorContains<enum turtle::ItemID_t>(class std::vector<enum turtle::ItemID_t,class std::allocator<enum turtle::ItemID_t> > &,enum turtle::ItemID_t const &)" (??$vectorContains@W4ItemID_t@turtle@@@turtle@@YA_NAAV?$vector@W4ItemID_t@turtle@@V?$allocator@W4ItemID_t@turtle@@@std@@@std@@ABW4ItemID_t@0@@Z) referenced in function "public: void __thiscall turtle::Barracks::swapItems(int,enum turtle::ItemID_t)" (?swapItems@Barracks@turtle@@QAEXHW4ItemID_t@2@@Z)
谢谢