繁体   English   中英

有关模板和迭代器的错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM