0

我有一个简单的函数设置来检查值是否在 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)

谢谢

4

0 回答 0