C++ 错误在模板类中声明 std::pair
Posted
技术标签:
【中文标题】C++ 错误在模板类中声明 std::pair【英文标题】:C++ error declaring std::pair inside template class 【发布时间】:2014-10-01 13:17:40 【问题描述】:我想避免在插入map
时使用std::pair()
构造函数或std::make_pair()
函数。我也想知道插入操作的成功状态,所以不能用operator[]
。我尝试了以下代码,但它产生了编译错误。
template<typename TKey, typename TVal>
class Map
private :
std::map<TKey, TVal> m_holder;
public :
bool insert(TKey key, TVal val)
std::pair<std::map<TKey, TVal>::iterator, bool> ret;
/* ret = m_holder.insert(std::make_pair(key, val)); */
return 0;
;
int main()
return 0;
错误:
Hello.cpp: In member function `bool Map<TKey, TVal>::insert(TKey, TVal)':
Hello.cpp:13: error: type/value mismatch at argument 1 in template parameter list for `template<class _T1, class _T2> struct std::pair'
Hello.cpp:13: error: expected a type, got ` std::map<TKey,TVal,std::less<_Key>,std::allocator<std::pair<const _Key, _Tp> > >::iterator'
Hello.cpp:13: error: invalid type in declaration before ';' token
帮我解决问题。
【问题讨论】:
Where and why do I have to put the "template" and "typename" keywords? 的可能重复项 【参考方案1】:std::pair<typename std::map<TKey, TVal>::iterator, bool> ret;
// ~~~~~~~^
【讨论】:
或使用auto
避免此问题以上是关于C++ 错误在模板类中声明 std::pair的主要内容,如果未能解决你的问题,请参考以下文章
没有函数模板“std::make_pair”的实例与参数列表匹配
接收 std::pair 作为参数并从花括号列表初始化推导出类型的模板化函数