【发布时间】:2016-08-10 15:04:15
【问题描述】:
以下代码在 VS 2013 中引发两个编译器错误:
- 模板函数定义抛出
错误 C2061:语法错误:标识符 '
iterator' - 该模板函数的特化抛出
错误 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);
【问题讨论】:
-
试试
typename map<rngT, lookupTable<T>*>::iterator。 -
我错了,但是在完全定义
lookupTable之前template class lookupTable<double>;会咬你。题外话:开关中的默认情况不返回任何内容。如果有无效的或新的opt偷偷溜进来,对编译器警告和一些更糟糕的调试很有好处。
标签: c++ dictionary syntax iterator std