用VC ++进行迭代器声明

时间:2015-10-14 02:14:24

标签: c++ visual-studio-2010 iterator

我正在尝试声明AN迭代器,但我遇到了问题。 我正在使用VC ++ 2010

#include<iterator> 
#include<map>
using namespace std;
using std::regex_replace;
template <class KTy, class Ty>
void PrintMap(map<KTy, Ty> map)
{
   **:iterator iterator;
      for (iterator p = map.begin(); p != map.end(); p++)
    cout << p->first << ": " << p->second << endl;** 
}

错误消息是:

  

错误1错误C2143:语法错误:缺少';'在':'之前(for:iterator iterator;)

2 个答案:

答案 0 :(得分:1)

首先,您要将参数名称更改为map以外的其他名称,这是不明确的,因为它也是类型名称。

假设您希望迭代器类型为typedef,请使用:

typedef typename map<KTy, Ty>::iterator iterator;

for (iterator p = my_map.begin(); p != my_map.end(); p++) {
    cout << p->first << ": " << p->second << endl;
}

注意:您需要typename关键字,因为类型取决于模板参数。

答案 1 :(得分:0)

错误是您已将变量地图命名为类型名称。

void PrintMap(map<KTy, Ty> map)
{
   **:iterator iterator;
      for (iterator p = map.begin(); p != map.end(); p++)
    cout << p->first << ": " << p->second << endl;** 
}

这样做......

template <typename KTy, typename Ty>
void PrintMap(map<KTy, Ty> mymap)
{   
    typedef typename map<KTy, Ty>::iterator iterator;       
    for (iterator p = mymap.begin(); p != mymap.end(); p++)
        cout << p->first << ": " << p->second << endl;

}