在模板双链表类中重载下标操作符

Overloading subscript operator in templated doubly linked list class

本文关键字:重载 下标 操作符 链表      更新时间:2023-10-16

我试图在我的双链表类中实现下标操作符的重载,但我面临着我自己无法克服的问题。我对c++也很陌生。

这是我现在拥有的。

从DList类中取出:

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;

节点类:

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'类型的右值初始化'int&'类型的非常量引用无效返回lookAt[index].getItem();

这让我相信我的item变量被引用的方式有某种问题,或者/和重载函数的返回部分。

如果有任何帮助/指导,我将不胜感激。

欢呼

您的getItem()返回一个t型变量,它是真实数据副本。(右值)

您的[]操作符尝试返回T&,这是一个左值(引用)。但是,不能将rvalue转换为lvalue。

一个可能的解决方案是在getItem()中返回T&,如下所示:

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

希望能有所帮助。