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 对静态常量字符的可修改引用(所以我什至不确定它是否会编译) - 但从概念上讲它无论如何都没有意义。
在那种情况下,您可能真的想抛出异常或类似的东西。
因此,在 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&
.
快速修复:
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 对静态常量字符的可修改引用(所以我什至不确定它是否会编译) - 但从概念上讲它无论如何都没有意义。
在那种情况下,您可能真的想抛出异常或类似的东西。