我有一個鏈接串列,其中包含指向第一個和最后一個節點的指標以及指示串列中有多少個節點的大小。我已經為指向節點地址的Queue實作了迭代器,我已經成功實作了begin(),end()和==,!=,并且也進行了測驗,但是我無法實作 ( ) 和 (int) 運算子用于迭代器,我希望 運算子將節點的地址更改為鏈表中的下一個,當我嘗試編譯時出現以下錯誤:我no matching function for call to ‘Node<int>::getNext() const’
該如何制作迭代器運算子多載無需typename在宣告開頭鍵入即可作業
Node班級:
template<class T>
class Node {
public:
Node(const T& t);
~Node()=default; // Destructor
Node(const Node&) = default; // Copy Constructor set to default
Node& operator=(const Node&) = default; // Assignment operator set to default
T& getData();
const T& getData() const;
Node* getNext();
void setNext(Node<T>* newNext);
private:
T m_data;
Node* m_nextNode;
};
template<class T>
Node<T>::Node(const T& t) {
this->m_data=t;
this->m_nextNode=nullptr;
}
template<class T>
Node<T>* Node<T>::getNext() {
return this->m_nextNode;
}
Queue班級:
template<class T>
class Queue {
public:
static const int DEFAULT_FIRST_INDEX=0;
static const int SIZE_EMPTY=0;
Queue();
~Queue(); // Destructor
Queue(const Queue&) = default; // Copy Constructor set to default
Queue& operator=(const Queue&) = default; // Assignment operator set to default
void pushBack(const T& t);
T& front();
const T& front() const;
void popFront();
int size() const;
class Iterator;
Iterator begin() const;
Iterator end() const;
class EmptyQueue {};
private:
Node<T>* m_head;
Node<T>* m_tail;
int m_size;
};
Queue<T>::Iterator班級:
template<class T>
class Queue<T>::Iterator {
public:
const T& operator*() const;
Iterator& operator ();
Iterator operator (int);
bool operator==(const Iterator& iterator) const;
bool operator!=(const Iterator& iterator) const;
Iterator(const Iterator&)=default;
Iterator& operator=(const Iterator&)=default;
class InvalidOperation {};
private:
const Node<T>* m_node;
Iterator(const Node<T>* m_node);
friend class Queue<T>;
};
template<class T>
Queue<T>::Iterator::Iterator(const Node<T>* m_node) {
this->m_node=m_node;
}
template<class T>
typename Queue<T>::Iterator& Queue<T>::Iterator::operator () {
this->m_node=m_node->getNext();
return *this;
}
uj5u.com熱心網友回復:
typename如果沒有在定義的開頭,我如何使它作業?
如果您的意思是函式Queue<T>::Iterator::operator ()定義,您可以通過尾隨回傳型別來完成,如下所示:
template<class T>
auto Queue<T>::Iterator::operator () -> Iterator&
//^^^ ^^^^^^^^^
{
this->m_node = m_node->getNext();
return *this;
}
話雖如此,(IMO)將模板類或模板函式的定義移動到同一轉換單元之外有點冗長乏味。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481815.html
