我意识到存在很多类似的问题,但找不到解决我的问题的任何问题(阅读:我没有真正理解答案,以便可以应用它以我的情况)带有模板化参数的模板化函数
我有以下功能:
void printVariable(map<string, bool*>::iterator it)
{
cout << it->first << " " << *(it->second) << endl;
}
现在,如果我有一个map<string, bool*> mapping
我可以做到以下几点:printVariable(mapping.begin());
这个工作,现在我也有AA map<string, int*>
和希望能够做到同样的,所以我想我改变printVariable功能:
template <typename T>
void printVariable(map<string, T*>::iterator it)
{
cout << it->first << " " << *(it->second) << endl;
}
然而这使编译错误(GCC):
error: variable or field 'printVariable' declared void
error: expected ')' before 'it'
我想我可以解决此很容易通过重载函数。但我想知道为什么上述不起作用。
EDIT2:删除的文本声称一个合适的解决方案是错误的
如果迭代器是模板类型上的依赖类型,是否需要向参数添加类型名说明符? 'void printVariable(typename map :: iterator it)' –
2012-04-13 12:31:29