焦炭和放大器; operator []过载参考返回? (链表)

时间:2015-01-18 23:11:56

标签: c++ char operator-overloading memory-address singly-linked-list

因此,在返回正确类型的变量时,我遇到了这个错误。它说的是&#34的效果;非const的初始值必须是左值"

任何人都可以帮我修改我的代码以正确返回给定索引处的字符吗?这是一个单独链接的项目BTW。

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;
    }
}

2 个答案:

答案 0 :(得分:2)

问题在于:

return 'z';

'z'求值为一个常量,该常量不能用作返回char&的函数的返回值。

快速修复:

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;
    }
}

答案 1 :(得分:1)

我想如果你想回归&#39; z&#39;在索引超出范围的情况下,你必须首先从它做一个左值。这可以通过在函数内使用值&#39; z&#39;声明一个静态const char来完成,然后返回它的名称。

然而,想想你正在尝试做什么 - 你将一个可修改的引用返回到一个静态const char(所以我甚至不确定它会编译) - 但从概念上讲它反正没有意义。

在这种情况下,您可能实际上想要抛出异常或类似内容。