在模板化双向链表中重载下标运算符 class

Overloading subscript operator in templated doubly linked list class

我正在尝试在我的双向链表 class 中实现下标运算符的重载,但我遇到了我自己无法克服的问题。我对 C++ 也很陌生。

这就是我现在拥有的。

从 DList 中取出 class:

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;

节点class:

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;
};

我不断收到的错误是: 从类型 'int' return 的右值初始化类型 'int&' 的非常量引用无效 lookAt[index].getItem();

这让我相信我的 item 变量的引用方式存在某种问题,or/and 重载函数的 return 部分。

将不胜感激任何 help/guidance。

干杯

你的getItem()return是一个T型变量,是对真实数据的copyitem . (右值)

您的 [] 运算符尝试 return 一个 T&,这是一个左值(参考)。但是,我们不能将右值转换为左值。

一个可能的解决方案是 return T& 在 getItem() 中,像这样:

T& getItem() {
    return item;  // Now returns a reference (lvalue).
}

希望对您有所帮助。