我有一个模板类,其中包含作为模板参数给出的类型的指针向量。我希望能够使用基于范围的迭代来对向量的有限部分进行迭代。我的课程包含以下功能:
template< typename ObjectType >
class ObjectList
{
...
public:
//! Begin iteration over a list of objects
std::vector<ObjectType*>::iterator begin();
//! Iterator to one past the end of the list of objects
std::vector<ObjectType*>::iterator end();
private:
std::vector<ObjectType*> object_ptrs;
};
这不能与描述一起编译Error C2061 syntax error: identifier 'iterator'
。我想不出为什么std::vector<ObjectType>::iterator
永远都找不到的任何原因,除非无法找到ObjectType
它本身,但是如果删除了reference所在的行,则该类的其余部分将成功实例化iterator
。
任何人都知道发生了什么事吗?我敢肯定,我可能会遗漏一些明显的东西。提前致谢!
您应该typename
在这里使用,因为std::vector<ObjectType*>
它是依赖类型的名称,它取决于template参数ObjectType
。
typename std::vector<ObjectType*>::iterator begin();
typename std::vector<ObjectType*>::iterator end();
$ 14.6 / 2名称解析[temp.res]
假定模板声明或定义中使用的依赖于模板参数的名称不命名类型,除非适用的名称查找找到类型名称或该名称由关键字typename限定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句