0

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

我正在定义一个模板类如下

template <class T>
class MyVector : public std::vector<boost::shared_ptr<T>>
{
public:
   typedef MyVector::iterator MyIter;
};

我在 typedef 中收到此错误MyIter

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

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

我错过了什么?我想定义一个模板类并 typedef 迭代器。

4

1 回答 1

4

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

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

typedef typename MyVector::iterator MyIter;

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

于 2012-11-06T19:50:42.080 回答