簡體   English   中英

C ++矢量模板迭代器結束函數

[英]C++ vector template iterator end function

我有一個任務來編寫帶有單獨描述的模板矢量。 我想實現迭代器,在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);

看來,我聽不懂。 怎么了?

這里:

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個構造函數都引用了一個向量(而不是迭代器)。 你應該做這個:

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應該是vector的方法,而不是迭代器的方法)。 現在*this將是對Vector<T>的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM