2015-10-14 48 views
0

我试图申报AN迭代器,但我有问题。 我使用VC++ 2010迭代器声明与VC++

#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:语法错误:缺少 ';'之前“:”(用于:迭代器迭代器)

+0

错误\t 1个\t错误C2143:语法错误:缺少 ';'之前':'(for:迭代迭代器;) – user27995

回答

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; 

} 
+0

的确,我纠正了它:-) – dspfnder

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关键字,因为这个类型依赖于一个模板参数。

+0

不工作太 – user27995

+0

@ user27995:哦,嘿,改变参数的名称为'map'以外的东西。你也有一个相同的名字。 – Blastfurnace