Ошибка в шаблоне и итераторе - PullRequest
0 голосов
/ 14 сентября 2018
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 говорит мне, что «итератор» не определен.И Dev-C ++ говорит мне, что «итератор» не называет тип.Вопрос возникает на:

iterator iVector<T>::begin();
iterator iVector<T>::end();

Но я думаю, что я определил это на:

typedef T * iterator;

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

В качестве альтернативы "подробный"

template<class T>
typename iVector<T>::iterator
iVector<T>::begin()
{
    // ...
}

вы можете использовать

template<class T>
auto iVector<T>::bagin()
-> iterator
{
    // ...
}
0 голосов
/ 14 сентября 2018

Вам нужно указать имя с именем класса, когда вы используете его из определения класса.например,

template<class T>
typename iVector<T>::iterator iVector<T>::begin()
^^^^^^^^^^^^^^^^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...