我从stackoverflow question这段代码:使用模板
template <typename K, typename V>
bool exists_in(std::map<K,V> const& haystack, K const& needle)
{
return haystack.find(needle) != haystack.end();
}
作为模板的新用户,我还是明白是怎么回事。只是,我似乎无法应用它。
我已经定义
class Varinfo; // meta information about vars
std::map<std::string,VarInfo*> g_varMap; // a map between var names and meta-info
我主要的C++代码,我有这样的说法:
// various other uses of g_varMap that don't cause errors then
if (exists_in(g_VarMap, "fred"))
产生这个错误。
undefined reference to `bool exists_in<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
VarInfo*>(std::map<std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, VarInfo*, std::less<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, VarInfo*> > > const&, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)'
我完全不明白。
有人能告诉我为什么这是抱怨吗?我缺少什么样的模板知识?我已经对由返回的变量和发送给exists_in()(包括std :: string(“fred”))的变量尝试了各种投射操作。没什么帮助。有些只是产生了更多无意义的错误。
'exists_in <>'定义在哪里?定义需要对调用者可见。 – ildjarn
您的错误是一个链接器错误,而不是编译器错误。 –
我不喜欢模板。我会写:'template bool exists_in(Map const&m,typename Map :: key_type const&k){return m.find(k)!= m.end(); }' –