値が 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();
}
2 番目の例では失敗し、このリンカー エラーが表示されます
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)
ありがとうございました