2015-10-14 70 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