在boost :: unordered_map中指定模板参数时出现编译错误

时间:2016-04-23 04:40:30

标签: c++ templates boost

我正在为Boost无序地图容器编写包装器方法。在boost Unordered Map中有一个方法begin(), 它将迭代器返回给第一个元素。在我的包装中,我试着写一个模板化的包装器。例如

template< class Tkey, class Tvalue>
class CMyUnorderedMap
{
       boost::Unordered_map<TKey,  TValue> m_myMap;
    public:
       boost::unordered_map<TKey,  TValue>::iterator Begin();

};

template< class Tkey, class Tvalue> 
boost::unordered_map<TKey,  TValue>::iterator CMyUnorderedMap< TKey,  TValue >::Begin()
{
    return   m_myMap.begin()
}

在编译上面的代码时(使用模板参数)我在VS 2010中遇到编译错误,如下所示。

warningc4346:boost :: unordered :: unordered_map&lt; TKey,TValue&gt; :: iterator:依赖名称不是类型。

错误C3860模板参数列表下面的类模板名称必须按照tempate参数列表中使用的顺序列出参数

但是,如果我使用模板参数编译代码,则代码符合。 例如,如果下面的指定工作

boost::unordered_map< std::string,  std::string>::iterator Begin();

是否有人帮助

2 个答案:

答案 0 :(得分:0)

在类模板正文外定义类模板的成员函数时,需要指定模板详细信息。

对于您的情况,您需要使用:

template< class Tkey, class Tvalue> // Missing from your code.
boost::unordered_map<TKey,  TValue>::iterator CMyUnorderedMap< TKey,  TValue >::Begin()
{
    return   m_myMap.begin()
}

答案 1 :(得分:-1)

在我更改了以下代码后,它工作了

typename boost::unordered_map<TKey,  TValue>::iterator CMyUnorderedMap< TKey,  TValue >::Begin()

{

    return   m_myMap.begin()
} 

在功能的解除和防御中添加关键字 typename

<ListView 
<RelativeLayout />
/>