我收到以下编译错误:
error: expected `;' before 'it'"
这是我的代码:
#include <boost/function.hpp>
#include <list>
template< class T >
void example() {
std::list< boost::function<T ()> >::iterator it;
}
为什么会这样?我该如何解决?
答案 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。