std::map<Item*, item_quantity_t> _items;
bool Inventory::hasItem(Item const& item) {
return (_items.find(&item) != _items.end() );
};
此代码无效,但将“hasItem”的输入类型更改为 Item & item
将有效...
有人可以向我解释为什么吗?我已经看到 std::find 需要一个 const 引用,所以向它传递一个 const 对象应该没问题,至少我是这么理解的
最佳答案
您已将 map 的键类型定义为指向非常量项 Item*
的指针。 find
方法需要键类型的(对 a 的常量引用)值,因此它需要指向非常量的指针。
展开模板时,find
的参数类型为Item* const&
。
您可以更改您的hasItem
以采用非const 引用Item&
,或者您可以将您的键类型更改为指向const Item 的指针项目常量*
。
关于c++ - 为什么 map::find 需要我的参数不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841782/