用vc++声明迭代器
iterator declaration with VC++
我试图声明一个迭代器,但我有问题。我用的是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;)
首先,您想将参数名称更改为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
关键字,因为类型依赖于模板参数
错误是您将变量命名为map,这是一个类型名。
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;
}
相关文章:
- 为什么此函数返回一个link_type但它被声明为迭代器
- 在 leveldb 的 c++ 示例中声明迭代器时出现分段错误
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- 如何将迭代器变量声明为私有成员变量
- 什么时候足以将const_iterator声明为const迭代器
- 声明一个模板函数,该函数接收两个泛型迭代器作为参数
- C 迭代器从Typedef std :: Map作为模板参数声明
- 在 GCC 上自动声明映射迭代器错误
- ISO C++禁止声明没有自动迭代器类型的“it”
- 声明泛型迭代器
- 迭代器的声明:"does not contain a type"
- 如何在 C++ 中为堆栈集声明迭代器
- 如何正确地声明从非常量迭代器到指针的常量指针
- 模板化的迭代器声明
- 如何向派生类对象声明迭代器
- 如何在for循环中声明第二个迭代器
- 如何为未知容器声明迭代器变量
- std::list< pair<double, int> >::迭代器声明不起作用
- 这个迭代器声明有什么问题
- 语义迭代器声明