0

为什么以下内容无法编译(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其用作成员函数中的类型,但不能用作成员变量的类型。

4

1 回答 1

4

这是一个案例typename。简短的回答,你需要这样做:

 typedef typename std::vector< M >::iterator iteratorT;

长答案,编译器不知道什么std::vector< M >::iterator可以解析为M任何东西,并且可能有一个专门化std::vector的。具体来说,它无法判断std::vector< M >::iterator是类型还是值,它相信它是一个值。您必须通过插入来明确告诉编译器它的类型typename

于 2012-05-18T00:06:35.993 回答