char& operator[] 重载引用 return? (链表)

char& operator[] overload reference return? (linked list)

因此,在 return 使用正确的变量类型时,我遇到了这个错误。它说的是 "initial value of non-const must be lvalue"

的效果

任何人都可以帮助我修改我的代码以正确 return 给定索引处的字符吗?这是一个单链表项目顺便说一句。

char& MyList::operator[](const int i)
{
    if (i > size())
        return 'z';
    Node* temp = head;
    for (unsigned int a = 0; a < i; a++)
    {   
        if (a == i)
            return temp->value;
        temp = temp->next;
    }
}

问题行是:

return 'z';

'z' 求值为一个常量,该常量不能用作 returns char&.

函数的 return 值

快速修复:

char& MyList::operator[](const int i)
{
    static char z = 'z';

    if (i > size())
        return z;
    Node* temp = head;
    for (unsigned int a = 0; a < i; a++)
    {   
        if (a == i)
            return temp->value;
        temp = temp->next;
    }
}

我认为如果你想在索引越界的情况下return 'z',那么你必须先从中创建一个左值。这可以通过在函数内声明一个值为 'z' 的 static const char 来完成,而 return 是它的名称。

但是,考虑一下您正在尝试做什么 - 您正在 return 对静态常量字符的可修改引用(所以我什至不确定它是否会编译) - 但从概念上讲它无论如何都没有意义。

在那种情况下,您可能真的想抛出异常或类似的东西。