map::find
возвращает значение map::end()
, если значение не найдено. Это значение итератора, которое вы не можете разыменовать, поэтому слепо делать bagItems.find(item)->second
- это нет-нет.
Вместо этого проверьте возвращаемое значение и действуйте соответственно:
int bag::getItem( const string item)
{
// We don't know what CONST_ITERATOR_TYPE is, but you do
CONST_ITERATOR_TYPE i = this->bagItems.find(item);
return i == this->bagItems.end() ? 0 : i->second;
}
Для этого вам понадобится локальная переменная типа const_iterator
; однако этот тип зависит от аргументов шаблона вашей карты (чего мы не знаем). Так что вам придется заполнить пробел в себе.
Если вам удобно использовать компилятор C ++ 11, удобный
auto i = this->bagItems.find(item);
будет работать.