C++ 通过迭代器更改对象

C++ 通过迭代器更改对象,c++,iterator,C++,Iterator,我尝试使用迭代器更改对象,但出现以下错误: 错误1错误C2662:'void Item::setCount(int)':无法转换 'this'指针从'const Item'指向'Item&' 1 IntelliSense:对象的类型限定符不是 与成员函数兼容 这是我的代码: void Customer::addItem(Item other)//add item to the set { set<Item>::iterator it; it = _items.find

我尝试使用迭代器更改对象,但出现以下错误:

错误1错误C2662:'void Item::setCount(int)':无法转换 'this'指针从'const Item'指向'Item&'

1 IntelliSense:对象的类型限定符不是 与成员函数兼容

这是我的代码:

void Customer::addItem(Item other)//add item to the set
{
    set<Item>::iterator it;
    it = _items.find(other);

    if (it != _items.end())
    {
        it->setCount( (this->getCount((*it)) + 1) );
    }

    else
        _items.insert(other);
}
迭代器是常量,因为修改条目会影响排序

要解决此问题,请执行以下操作之一:

  • 选择其他容器
  • 执行删除+添加操作(即,从集合中删除项目,修改它,然后再次将其添加到集合中)
  • 在由
    设置计数修改的字段上使用(如适用)
  • 在调用
    setCount
    (作为最后手段)之前,用于丢弃项目的
    const
    属性
对于后两个选项,请确保
setCount
不会修改任何更改
对象顺序的内容。

的迭代器是
常量
,因为修改条目会影响顺序

要解决此问题,请执行以下操作之一:

  • 选择其他容器
  • 执行删除+添加操作(即,从集合中删除项目,修改它,然后再次将其添加到集合中)
  • 在由
    设置计数修改的字段上使用(如适用)
  • 在调用
    setCount
    (作为最后手段)之前,用于丢弃项目的
    const
    属性

对于后两个选项,请确保
setCount
不会修改任何会改变
对象顺序的内容。

请参阅有关常量方法中可变字段的答案。请参阅有关常量方法中可变字段的答案。感谢您的评论。如果我无法使用set,如果我想更新我的物品计数器,我该怎么办?@Yair-如果看不到你的
物品
类,很难说,但你最好的选择可能是“选择一个不同的容器”。在您的情况下,我建议从项目中删除计数(毕竟,项目可能有名称、颜色、重量,但通常没有计数),并使用
std::map
(或
unordered\u map
)存储计数。@YairB.:我已经在我的回答中添加了更多的细节,希望能更好地澄清问题。谢谢你的评论。如果我无法使用set,如果我想更新我的物品计数器,我该怎么办?@Yair-如果看不到你的
物品
类,很难说,但你最好的选择可能是“选择一个不同的容器”。在您的情况下,我建议从项目中删除计数(毕竟,项目可能有名称、颜色、重量,但通常没有计数),并使用
std::map
(或
unordered\u map
)存储计数。@YairB.:我已经在我的答案中添加了更多的细节,希望这能更好地澄清问题。
it->setCount( (this->getCount((*it)) + 1) );