2016-08-10 115 views
-4

下面的代码抛出2个的编译器错误在VS 2013:语法错误识别符 '游标'

  1. 模板函数定义抛出

    错误C2061:语法错误:识别符 'iterator'

  2. 该模板功能的专业化抛出

    错误[R C2912:明确的专业化“double getFillIn<double,double>(fillInOptions,double,std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>,inputLoader *,va_list)”不是一个函数模板

任何人都可以请解释原因的特?我很确定第二个错误只是第一个错误的结果,但我不明白为什么它不能找出iterator标识符。

#include <map> 

template <typename T> class table { 
}; 

template <typename S, typename T> 
void f(S s, std::map<S, table<T>*>::iterator it); 
+2

尝试'typename map *> :: iterator'。 – songyuanyao

+0

我错了,但'template class lookupTable ;'在完全定义'lookupTable'之前'会咬你。关闭主题:交换机中的默认情况不会返回任何内容。对于编译器警告以及如果一个无效或新的'opt'偷偷进入有点困难的调试很好。 – user4581301

回答

1

因为编译器还不知道的std::map<S, table<T>*>的类型,它可以知道的还以为std::map<S, table<T>*>::iterator是一种类型(这可能是一个成员)。你需要告诉它它将是一个类型:

template <typename S, typename T> 
void f(S s, typename std::map<S, table<T>*>::iterator it); 
+0

修复了这两个错误 - 非常感谢! – GodLovesUGaius

相关问题