[解决方法] C7510 “iterator”: 类型 从属名称的使用必须以“typename”为前缀
0x00 问题描述
template<typename T1, typename T2>
void printMap(map <T1, T2>& Map)
{
map <T1, T2> ::iterator it;
for (it = Map.begin(); it != Map.end(); ++it)
{
cout << it->first << " : " << it->second << endl;
}
}
上面代码就是输出Map的所有内容,若不用模板函数,将T1和T2换成<int, string>,是一点问题都没的,但是用函数模板编译器就会报错,内容如下.
C2760 语法错误: 意外标记 "标识符",应为 ";"
C7510 “iterator”: 类型 从属名称的使用必须以“typename”为前缀
0x01 解决方法
在 "map <T1, T2> ::iterator it;" 前加 typename,栗子如下.
template<typename T1, typename T2>
void printMap(map <T1, T2>& Map)
{
typename map <T1, T2> ::iterator it;
for (it = Map.begin(); it != Map.end(); ++it)
{
cout << it->first << " : " << it->second << endl;
}
}
0x02 后记
- 这样编译就成功了.
- No Pains,No Gains.