C ++向量模板迭代器结束函数

时间:2015-10-16 23:00:31

标签: c++ constructor iterator

我的任务是使用单独描述编写模板矢量。我想实现迭代器,我在end()函数中有一个奇怪的错误。

我有两个构造函数:

template <class T>
Vector<T>::iterator::iterator(Vector<T>& v): vector(v), index(0){}

template <class T>
Vector<T>::iterator::iterator(Vector<T>& v, bool): vector(v), index(v.getSize()){}

和begin()和end()实现:

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::begin()
{
    return iterator(*this);
}

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::end()
{
    return iterator(*this, true);
}

在main()中:

 Vector<int>::iterator it(vec);        
        for(Vector<int>::iterator start = it.begin(); start != it.end(); ++start)
        {
            std::cout << *start << std::endl;
        }

我有一个错误:

F:\Vector\vector.cpp:281: ошибка: no matching function for call to 'Vector<int>::iterator::iterator(Vector<int>::iterator&, bool)'
     return iterator(*this, true);

看来,我不明白。怎么了?

1 个答案:

答案 0 :(得分:1)

下面:

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::begin()
{
    return iterator(*this);
}

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::end()
{
    return iterator(*this, true);
}

通过传递*this来构造迭代器,但*this是对迭代器的引用。正如编译器所说,你没有定义任何迭代器构造函数,它将对迭代器的引用作为参数。你的2个construtors都引用了一个向量(不是迭代器)。 你应该这样做:

template <class T>
typename Vector<T>::iterator Vector<T>::begin()
{
    return iterator(*this);
}

template <class T>
typename Vector<T>::iterator Vector<T>::end()
{
    return iterator(*this, true);
}

(我删除了::iterator,因为beginend应该是向量的方法,而不是迭代器的方法。现在*this将引用Vector<T>