为什么我不能在std :: list中存储boost :: function?

时间:2008-11-11 11:29:17

标签: c++ list boost

我收到以下编译错误:

error: expected `;' before 'it'"

这是我的代码:

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

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

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:18)

你需要将typename放在该行的前面,因为你执行:: iterator的类型依赖于模板参数T.像这样:

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

考虑一下

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

这可能意味着乘法或指针。这就是为什么你需要typename来明确你的意图。没有它,编译器假定不是一个类型,因此它需要一个运算符或语法分号。


另请参阅新的C ++ FAQ条目Where to put template and typename on dependent names