在模板双链表类中重载下标操作符
Overloading subscript operator in templated doubly linked list class
我试图在我的双链表类中实现下标操作符的重载,但我面临着我自己无法克服的问题。我对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).
}
希望能有所帮助。
相关文章:
- 如何重载下标运算符 [] 以引用 2d STL 数组?
- 允许 nullptr 的 C++ 重载下标取消引用
- 基成员的重载下标运算符
- 如何重载下标运算符以返回可以是左值的可选值?
- 重载下标运算符不返回指针
- 如何通过指针简化重载下标运算符的使用
- 将 boost::shared_ptr 与重载下标运算符 ([]) 的类一起使用
- 重载下标运算符以根据分配的类型调用函数
- 重载下标运算符会导致访问冲突
- 如果不满足"if criteria",默认返回什么?重载下标运算符
- 为特定的读写操作重载下标运算符
- C++:重载下标运算符(不同的返回类型)
- 毁灭战士 3 来源:为什么表示 2 向量的类会重载下标运算符两次
- 通过重载下标操作符()从矩阵中获取向量
- 重载下标操作符
- 在模板双链表类中重载下标操作符
- 如何重载下标操作符以允许RPG字符数组
- 使用重载下标运算符"[ ]"获取数组并将其设置为数组的值将不起作用
- c++两个版本的重载下标操作符
- 重载下标操作符并使用双指针