如何修复只读对象中成员的错误分配?
How to fix error assignment of member, in read-only object?
我有以下函数:
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 的副本。
取自这里。
相关文章:
- vector.resize()中的分配错误
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 如何修复只读对象中成员的错误分配?
- 无法将错误分配给成员函数中"类型的实体"
- 分段错误分配函数结果
- 如何实现,错误分配中止而不是抛出异常
- C++代码错误分配
- 如何修复错误分配C++运行时错误
- 分段错误 - 分配类困难
- 带有数组类型表达式的错误分配
- Sprintf 缓冲区问题,错误分配给字符数组
- 而 (p=strtok(NULL, "," )) 警告:p可识别的错误分配
- 错误:分配只读位置“arr2.IntArray::operator[](1)”arr2[1]=24;
- std::映射错误分配错误
- 为什么"e.what()"打印"错误分配"?
- std::vector<const char *>的错误分配效果?
- 使用指向类的指针进行错误分配
- 错误:分配只读引用“__b”
- 向量错误分配错误 C++