繁体   English   中英

下标运算符重载错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM