我的任务是使用单独描述编写模板矢量。我想实现迭代器,我在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);
看来,我不明白。怎么了?
答案 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
,因为begin
和end
应该是向量的方法,而不是迭代器的方法。现在*this
将引用Vector<T>
。