可能的重复:
为什么我需要在G 中使用Typedef TypeName而不是VS?
我正在定义一个模板类,如下所示
template <class T>
class MyVector : public std::vector<boost::shared_ptr<T>>
{
public:
typedef MyVector::iterator MyIter;
};
我在 MyIter
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
我正在使用VS 2010进行编译,我确保存在vector
和boost::shared_ptr
的包含。如果我删除模板T
并将其替换为int
,则所有内容都没有错误。
我想念什么?我想定义模板类,然后打字迭代器。
这个问题在这里得到很好的回答:为什么我需要在G 中使用Typedef TypeName,而不是vs?
但长话短说,您必须以这种方式使用关键字 typename :
typedef typename MyVector::iterator MyIter;
因为在第一个通过(验证模板语法)中,编译器真的不知道 myVector :: iterator 是一种类型或变量(实际上它将在专用模板上使用它)。因此,暗示它是一种解决问题的类型。