如何修复只读对象中成员的错误分配?

How to fix error assignment of member, in read-only object?

本文关键字:错误 分配 成员 何修复 只读 对象      更新时间:2023-10-16

我有以下函数:

void editItem(http_request message, std::string attributeToChange, std::vector<std::string> path, std::vector<Item>& items)
{
message.extract_json().then([=](pplx::task<json::value> task) {
try {
std::string strId = path[0];
int id = stoi(strId);
for (auto &it: items) {
if (it.id == id) {
json::value val = task.get();
int newState = val[U(attributeToChange)].as_number().to_int32();
it.state = newState;
message.reply(status_codes::OK);
break;
}
message.reply(status_codes::BadRequest);
}
}
catch (std::exception &e) {
message.reply(status_codes::BadRequest);
}
});
}

并排队:it.state = newState;我有这样的错误:error: assignment of member ‘Item::state’ in read-only object.

这是项结构的样子:

struct Item
{
int id;
int state; //0,1,2
std::string title;
std::string description;
std::string owner;
std::string startDate; // string in format DD-MM-YYYY
std::string endDate; // string in format DD-MM-YYYY
std::string priority; //low/medium/hihg
};

里面没有const。我不知道哪里会成为问题。

如何修复此错误?

显然,当您按值捕获时,复制的items是只读的。解决方法,通过引用捕获(您还可以避免不必要的副本(:

message.extract_json().then([&](pplx::task<json::value>

老实说,这让我感到惊讶。经过一些研究:

添加此功能似乎是出于对用户可能没有意识到他获得了副本的担忧,特别是由于 lambda 是可复制的,他可能会更改其他 lambda 的副本。

取自这里。