由于我对C ++模板缺乏了解,我遇到了一个愚蠢的问题。
我有一个模板类Token和一个模板类Task。
任务在多图中包含一些令牌*;我想迭代它们。
所以,在我的一个函数中,我写道:
template <typename C>
void Task<C>::f() {
// some code...
multimap<string, Token<C>* >::iterator it;
}
但是我从g ++中得到了这个编译错误:
src/structures.cpp:29: error: expected ‘;’ before ‘it’
如果我把Token或类似的东西放在那里,它会编译。
哪里出错?
答案 0 :(得分:5)
你想:
typename multimap<string, Token<C>* >::iterator it;
这个错误很常见,我认为编译器编写者应该这样做:
error: expected ‘;’ before ‘it’ - did you forget a typename?
答案 1 :(得分:2)
我总是遵守规则,
“每当你进入模板函数(包括它的返回类型)并且你使用范围解析运算符(”::“)声明一些变量时,总是输入一个类型名。”
将变量声明为
typename multimap<string, Token<C>* >::iterator it;