Почему я не могу сохранить boost :: function в std :: list? - PullRequest
5 голосов
/ 11 ноября 2008

Я получаю следующую ошибку компиляции:

error: expected `;' before 'it'"

Вот мой код:

#include <boost/function.hpp>
#include <list>

template< class T >
void example() {
    std::list< boost::function<T ()> >::iterator it;
}

Почему это происходит? Как я могу это исправить?

1 Ответ

18 голосов
/ 11 ноября 2008

Вам нужно поставить typename перед этой строкой, так как тип, который вы делаете :: итератор, зависит от параметра-шаблона T. Например,

template< class T >
void example() {
    typename std::list< boost::function<T ()> >::iterator it;
}

Рассмотрим строку

std::list< boost::function<T ()> >::iterator * it; 

что может означать умножение или указатель. Вот почему вам нужно typename, чтобы прояснить свое намерение. Без него компилятор не принимает тип, и, следовательно, ему требуется оператор там или синтаксически точка с запятой.


Также обратитесь к новой записи C ++ FAQ Где поместить шаблон и имя типа на зависимые имена .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...