关于模板成员类型引发的错误:error: expected `;' before ‘iter’
先看一个例子:
#include <vector>
template<typename T>
class Foo {
};
template<typename T>
void method()
{
std::vector<Foo<T> > vecFoo;
std::vector<Foo<T> >::iterator iter = vecFoo.begin();
}
编译是通不过的。
解决办法:
typename std::vector<Foo<T> >::iterator iter = vecFoo.begin();
就可以了。
Effective C++:了解typename的双重意义里做了解释。
需要用typename告诉解析器这是个类型,否则编译器会当做相应的静态变量来处理。比如,C是一个模板类:
C::iterator* x;编译器会理解为是C的静态变量乘上x……
浙公网安备 33010602011771号