为什么以下不能编译(MSVC10 - 但我怀疑它不是有效的C ++),是否有解决方法?
template <typename M>
struct MyClass
{
typedef std::vector<M>::iterator iteratorT;
iteratorT myIterator;
};
错误是error C2146: syntax error : missing ';' before identifier 'iteratorT'
。我尝试了一系列具有相同结果的变体:您可以在成员函数中使用std::vector<M>::iterator
作为类型,但不能作为成员变量的类型。
答案 0 :(得分:4)
这是typename
的情况。简短的回答,你需要这样做:
typedef typename std::vector< M >::iterator iteratorT;
答案很长,编译器不知道std::vector< M >::iterator
解析的内容,因为M
可以是任何内容,并且std::vector
可以为其专门化。具体来说,它无法判断std::vector< M >::iterator
是类型还是值,并且它认为它是一个值。您必须通过插入typename
来明确地告诉编译器它的类型。