在模板化双向链表中重载下标运算符 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型变量,是对真实数据的copy,item . (右值)
您的 [] 运算符尝试 return 一个 T&,这是一个左值(参考)。但是,我们不能将右值转换为左值。
一个可能的解决方案是 return T& 在 getItem() 中,像这样:
T& getItem() {
return item; // Now returns a reference (lvalue).
}
希望对您有所帮助。
我正在尝试在我的双向链表 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型变量,是对真实数据的copy,item . (右值)
您的 [] 运算符尝试 return 一个 T&,这是一个左值(参考)。但是,我们不能将右值转换为左值。
一个可能的解决方案是 return T& 在 getItem() 中,像这样:
T& getItem() {
return item; // Now returns a reference (lvalue).
}
希望对您有所帮助。