これまでのところ、とても良い。しかし、いくつかの問題が生じました。別の奇妙なコンパイラエラー:未定義の参照を与えるテンプレート関数を呼び出す
error: undefined reference to `bool CheckMapForExistingEntry<std::string, int>(std::map<std::string, int, std::less<std::string>, std::allocator<std::pair<std::string const, int> > > const&, std::string const&)'
はこれが起こっている場所を他の3件のインスタンスがあります。
const bool bppExists = CheckMapForExistingEntry< std::string, int >(mConfigValues, "bpp");
私は、次を得る:
まず第一に、私は次の呼び出し時にということです。
宣言
template < class Key, class Value >
bool CheckMapForExistingEntry(const std::map< Key, Value >& map, const std::string& key);
、ここで何が起こっているこのよう
template < class Key, class Value >
bool CheckMapForExistingEntry(const std::map< Key, Value >& map, const std::string& key)
{
typename std::map< Key, Value >::iterator it = map.lower_bound(key);
bool keyExists = (it != map.end && !(map.key_comp() (key, it->first)));
if (keyExists)
{
return true;
}
return false;
}
定義:この関数は、以下のように見えますか?関数の宣言が含まれているヘッダーファイルが含まれていますが、まだ動作しません。 thisによれば、私はテンプレート引数の値を残して、ちょうど同じことをすることを拒否するkey_type
を渡すことになっています。例えば
:
CheckMapForExistingEntry<std::string>(someMap, "somekey"); //error
ソースファイル。宣言はヘッダーにあります。 – zeboidlund