C ++: ошибка при объявлении многокарточного итератора - PullRequest
0 голосов
/ 03 мая 2011

У меня глупая проблема из-за недостатка знаний о шаблонах C ++.

У меня есть шаблонный класс Token и шаблонный класс Task.

Задача содержит несколько токенов * внутриMultiMap;и я хочу перебрать их.

Итак, в одной из моих функций я написал:

template <typename C>
void Task<C>::f() {

    // some code...
    multimap<string, Token<C>* >::iterator it;

}

, но я получаю эту ошибку компиляции из g ++:

src/structures.cpp:29: error: expected ‘;’ before ‘it’

если я поставлю токен или что-то в этом роде, он скомпилируется.

Где ошибка?

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Вы хотите:

 typename  multimap<string, Token<C>* >::iterator it;

Эта ошибка настолько распространена, что я думаю, что создатели компилятора должны это сделать:

error: expected ‘;’ before ‘it’ - did you forget a typename?
2 голосов
/ 03 мая 2011

Я всегда следую правилу,

"Всякий раз, когда вы находитесь внутри шаблонной функции (включая ее тип возвращаемого значения) и объявляете некоторую переменную с помощью оператора разрешения области видимости (" :: "), тогдавсегда ставьте имя типа. "

Объявите вашу переменную как,

typename multimap<string, Token<C>* >::iterator it;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...