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的主要内容,如果未能解决你的问题,请参考以下文章

什么是 C++ std::pair 的 C# 模拟?

没有函数模板“std::make_pair”的实例与参数列表匹配

接收 std::pair 作为参数并从花括号列表初始化推导出类型的模板化函数

尝试在模板类中重载 / 运算符的 C++ 错误

由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误

C++学习34 模板类