C ++:声明多图迭代器时出错

时间:2011-05-03 10:55:41

标签: c++ templates

由于我对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或类似的东西放在那里,它会编译。

哪里出错?

2 个答案:

答案 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;