Ris*_*abh 0 c++ templates vector visual-studio-2010
我定义一个模板类如下
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 进行编译,我已确保包含vector
和boost::shared_ptr
存在。如果我删除模板T
并将其替换为int
所有内容,则编译不会出现错误。
我缺少什么?我想定义一个模板类并 typedef 迭代器。
这个问题在这里得到了很好的回答: 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是类型还是变量(它实际上在专用模板上是什么)。因此暗示它是一种类型可以解决问题。
归档时间: |
|
查看次数: |
3257 次 |
最近记录: |