[英]Subscript Operator Overloading Error
这是我的双向链接列表类中的一个函数,但是每次编译时,我都会收到以下消息:“无效的初始化类型为'int&'的非const引用是从类型为'int'的临时初始化的。我只是无法获取还有其他方法。
int& LinkedList::operator[](int index)
{
Node* current = head_;
for(int i = 0; i < index; i++){
current = current->getNextNode();
}
return(current->getValue()); // getValue() returns an int
}
提前致谢!
简单的答案: getValue
还必须返回一个int&
。
如果您希望能够使用它来修改存储在列表中的值,那么它将必须返回对该值的引用。 这意味着您需要使Node::getValue()
返回一个引用,或者添加另一种方式来获取对该节点中存储的值的引用。
如果您不想使用它来修改列表内容,则可以将返回类型更改为int
。
问题是您不能将非常量引用绑定到右值(在这种情况下,是由getValue()
函数返回的临时值)。 如果要提供对列表中存储的值的引用,以便调用者可以对其进行修改,则需要修改getValue()
以返回引用。
总体而言,您可能需要考虑对列表进行随机访问操作。 可能会误以为它很便宜 。 例如,用户可能尝试遍历列表,例如:
for (int i = 0; i < list.size(); ++i)
std::cout << list[i] << std::endl;
但是该迭代实际上是O(N ^ 2)而不是O(N)
(您应该知道,只使用std::list
... 出于某种原因不提供此操作...)
您返回int&
的原因是,写mylist[i] = 42
人实际上将修改列表的内容。
但是,您正在使用getValue
帮助程序获取值,该帮助程序根据错误消息返回一个副本。 通过分析数据类型,编译器已找到您的逻辑错误。 如果希望能够修改实际列表数据,则必须返回对实际列表数据的引用,而不是副本。
因此,正如Philipp所建议的, getValue
需要返回int&
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.