无法在从 std::vector 继承的类中 typedef 迭代器

Ris*_*abh 0 c++ templates vector visual-studio-2010

可能重复:
为什么我需要在 g++ 中使用 typedef typename 而不是 VS?

我定义一个模板类如下

template <class T>
class MyVector : public std::vector<boost::shared_ptr<T>>
{
public:
   typedef MyVector::iterator MyIter;
};
Run Code Online (Sandbox Code Playgroud)

我在 typedef 处收到此错误MyIter

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)

我正在使用 VS 2010 进行编译,我已确保包含vectorboost::shared_ptr存在。如果我删除模板T并将其替换为int所有内容,则编译不会出现错误。

我缺少什么?我想定义一个模板类并 typedef 迭代器。

imr*_*eal 6

这个问题在这里得到了很好的回答: Why do I need to use typedef typename in g++ but not VS?

但长话短说,您必须以这种方式使用关键字typename :

typedef typename MyVector::iterator MyIter;
Run Code Online (Sandbox Code Playgroud)

因为在第一遍(验证模板语法)中,编译器并不真正知道MyVector::iterator是类型还是变量(它实际上在专用模板上是什么)。因此暗示它是一种类型可以解决问题。