[英]A bug about the template and iterator
template<class T>
class iVector
{
protected:
int _size;
T * _vector;
public:
typedef T * iterator;//My definition of iterator
iVector(int n);
iterator begin();
iterator end();
};
//constructor:
template<class T>
iVector<T>::iVector(int n) : _size(n)
{
}
template<class T>
iterator iVector<T>::begin()
{
}
template<class T>
iterator iVector<T>::end()
{
}
我不知道为什么VS2017告诉我未定义“迭代器”。 而且DevC ++告诉我,“迭代器”没有命名类型。 问题发生在:
iterator iVector<T>::begin();
iterator iVector<T>::end();
但我认为我已经在以下方面进行了定义:
typedef T * iterator;
谢谢!
在类定义之外使用名称时,需要使用类名称来限定名称。 例如
template<class T>
typename iVector<T>::iterator iVector<T>::begin()
^^^^^^^^^^^^^^^^^^^^^
替代“冗长”
template<class T>
typename iVector<T>::iterator
iVector<T>::begin()
{
// ...
}
你可以用
template<class T>
auto iVector<T>::bagin()
-> iterator
{
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.