我試圖在雙鏈表類中實現下標操作符的重載,但是我面臨着我自己無法克服的問題。我對C++也很新穎。在模板雙向鏈表類中重載下標操作符
這就是我現在擁有的。從DLIST類
OUTTAKE:
T &operator[](int index) {
lookAt = root;
for (size_t i = 0; i < index; i++) {
lookAt = lookAt->getNext();
}
return lookAt->getItem();
}
Node<T>* root;
Node<T>* lookAt;
Node<T>* temp;
Node類:
template <class T>
class Node {
public:
Node() {
this->setNext(nullptr);
this->setPrev(nullptr);
}
Node *getNext() const {
return next;
}
void setNext(Node *next) {
Node::next = next;
}
Node *getPrev() const {
return prev;
}
void setPrev(Node *prev) {
Node::prev = prev;
}
T getItem() const {
return item;
}
void setItem(T item) {
Node::item = item;
}
private:
Node* next;
Node* prev;
T item;
};
我不斷收到錯誤是這樣的: 類型的非const引用無效初始化 '詮釋&' 從'int'類型的右值返回lookAt [index] .getItem();
這導致我相信我的item變量被引用的方式存在某種問題,或者/和重載函數的返回部分。
希望對此有所幫助/指導。
乾杯
'getItem()'需要改變返回'T&',或者'operator []'需要返回'T',或者後者需要在不使用前者的情況下實現。實際上,你可能需要重載'getItem()'的兩個重載 - 一個返回'T&'的非const關鍵字和一個返回'T'或'const T'的const關係。 –
奇怪的是'lookAt'和'temp'是成員變量而不是局部變量。 – Jarod42
感謝評論!改變getItem()返回T&和去除const解決了這個問題。我是否認爲const必須被刪除,因爲對item的引用必須能夠改變?是的,這些變量應該是本地的。 – ludolover