0
可能重复:
Why do I need to use typedef typename in g++ but not VS?不能脱离的std ::向量继承的类的typedef迭代
我定义的模板类,如下所示
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,我确定包含vector
和boost::shared_ptr
都存在。如果我删除了模板T
并将其替换为int
,则所有内容均无错地编译。
我错过了什么?我想定义一个模板类和typedef迭代器。
尝试在'typedef'和'MyVector'之间放置'typename'。请参阅[哪里,为什么我必须把“模板”和“typename”关键字?](http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-该模板,和类型名称的关键字)。 – jrok
请参阅参数&公共继承的'std :: vector <>':http://stackoverflow.com/questions/4353203/thou-shalt-not-inherit-from-stdvector –
也读有用的书“Exceptional C++ “这个问题很清楚 – linello