gpt4 book ai didi

c++ - '=' : left operand must be l-value

转载 作者:太空狗 更新时间:2023-10-29 23:53:15 34 4
gpt4 key购买 nike

当我编译以下代码时,我在“m.msg_body[i].id = i;”处收到“错误 C2106:'=':左操作数必须是左值”。当我注释掉该行时,没有错误。我的代码有什么问题?

static const short MSG_DATA_MAX = 10;

struct MsgBodyData
{
int id;
string value;
};

class MsgBody
{
public:
MsgBody()
{
len = 0;
}
MsgBody(MsgBody & msg_obj);
~MsgBody() {}

int length() { return len; }
void setLength(int _len) { len = _len; }

MsgBodyData operator[](short index)
{
if(index > -1 && index < MSG_DATA_MAX)
return data[index];

MsgBodyData dump_data;
return dump_data;
}

void operator=(MsgBody & msg_obj)
{
len = msg_obj.length();
for(int i = 0; i < len; ++i)
data[i] = msg_obj[i];
}

private:
int len;
MsgBodyData data[MSG_DATA_MAX];
};

MsgBody::MsgBody(MsgBody &msg_obj)
{
operator=(msg_obj);
}

struct Msg
{
int msg_id;
string msg_title;
MsgBody msg_body;
};


void sendMsg()
{
Msg m;
m.msg_id = 1;
m.msg_title = "test_msg";

int size = MSG_DATA_MAX;

for(int i = 0; i < size; ++i)
{
m.msg_body[i].id = i; // HERE I GOT ERROR !!!
m.msg_body[i].value = "test_value";
}
}

最佳答案

您的 operator[] 按值返回,这意味着它制作了一个临时拷贝并将其返回。临时对象是右值。您应该修改您的运算符(operator)以返回引用。实际上,您应该有两个版本,一个 const 版本,它返回一个 const 引用,一个 non-const 版本,它返回一个非常量引用。

不过,您处理超出范围的索引的方法必须改变。您可以抛出异常,也可以将其保留为未定义的行为,只需确保将其记录下来即可。另一种选择是在类中有一个虚拟的 MsgBodyData 对象,当您获得错误的索引时返回该对象,但这似乎是一个非常愚蠢的设计。

关于c++ - '=' : left operand must be l-value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11857604/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com