C7510 “iterator”: 类型 从属名称的使用必须以“typename”为前缀

[解决方法] C7510    “iterator”: 类型 从属名称的使用必须以“typename”为前缀

0x00 问题描述 

template
void printMap(map & Map)
{
	map  ::iterator it;
	for (it = Map.begin(); it != Map.end(); ++it)
	{
		cout << it->first << " : " << it->second << endl;
	}
}

上面代码就是输出Map的所有内容,若不用模板函数,将T1和T2换成,是一点问题都没的,但是用函数模板编译器就会报错,内容如下.

C2760    语法错误: 意外标记 "标识符",应为 ";"    

C7510    “iterator”: 类型 从属名称的使用必须以“typename”为前缀

 0x01 解决方法

在 "map ::iterator it;" 前加 typename,栗子如下.

template
void printMap(map & Map)
{
	typename map  ::iterator it;
	for (it = Map.begin(); it != Map.end(); ++it)
	{
		cout << it->first << " : " << it->second << endl;
	}
}

0x02 后记

  • 这样编译就成功了.
  • No Pains,No Gains.

你可能感兴趣的:(c++)