我正在尝试声明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;)
答案 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;
}