SearchMessage()
объявлен как const
, поэтому его параметр this
указывает на объект const SmartCarrier
, поэтому его член accounts_map
также равен const
.Когда find()
вызывается для const map
, он возвращает const_iterator
вместо iterator
.
Кроме того, accounts_map.end
должно быть вместо accounts_map.end()
.
Кроме того, использование исключения таким, какое вы есть, просто напрасно тратит накладные расходы, от которых вы можете (и должны) избавиться.
Попробуйте это:
void SmartCarrier::SearchMessage() const {
string account;
cout << "Enter an account: ";
cin >> account;
map<string, vector<Message *>>::const_iterator m_iter = accounts_map.find(account);
if (m_iter != accounts_map.end()) {
//code to display account information
} else {
cout << "Error: Account not found\n";
}
}
Если вы используете C ++ 11или позже, рассмотрите возможность использования auto
вместо const_iterator
явно, это также исправит ошибку:
auto m_iter = accounts_map.find(account);