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



可能的重复:
为什么我需要在G 中使用Typedef TypeName而不是VS?

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

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

我在 MyIter

的Typedef上遇到此错误
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

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

我想念什么?我想定义模板类,然后打字迭代器。

这个问题在这里得到很好的回答:为什么我需要在G 中使用Typedef TypeName,而不是vs?

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

typedef typename MyVector::iterator MyIter;

因为在第一个通过(验证模板语法)中,编译器真的不知道 myVector :: iterator 是一种类型或变量(实际上它将在专用模板上使用它)。因此,暗示它是一种解决问题的类型。

最新更新