Ошибка: Illegal Indirection (Код ошибки - C2100)
Не могу понять в чем проблема с простым кодом (решал задачу на CodeWars). В начале она работала, потом после нескольких запусков она начала выдавать ошибку Illegal Indirection (C2100). За ошибкой в Google заглядывал, но так и не разобрался с проблемой. Буду очень благодарен за помощь! :)
std::map <char, unsigned> count(const std::string &str)
{
if (str.length() == 0)
return { 0, 0 };
std::map <char, unsigned> characters_map;
std::map <char, unsigned>::iterator itr;
for (std::size_t i = 0; i < str.length(); i++)
{
itr = characters_map.find(str[i]);
if (itr != characters_map.end())
{
itr -> second++;
}
else
{
characters_map.insert(std::make_pair(str[i], 1));
}
}
return characters_map;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
return { 0, 0 };
тут у вас два int, вот компилятор и недоумевает, как их в map превратить...
Рекомендую длинно, но надежно и понятно :) :
std::map <char, unsigned> characters_map;
if (str.length() == 0)
{
characters_map.insert(std::make_pair<char,unsigned>(0,0));
return characters_map;
}
std::map <char, unsigned>::iterator itr;
Автор решения: KoVadim
→ Ссылка
Сократим чуточку код, попутно исправив ошибку компиляции
std::map <char, unsigned> count(const std::string &str)
{
if (str.empty())
return {{ 0, 0 }};
std::map <char, unsigned> characters_map;
for (char c : str)
{
characters_map[c]++;
}
return characters_map;
}
Хотя это больше похоже на преждевременную оптимизацию. Я бы писал вот так
std::map <char, unsigned> count(const std::string &str)
{
std::map <char, unsigned> characters_map;
for (char c : str)
{
characters_map[c]++;
}
return characters_map;
}
в этом случае для пустой строки будет возвращаться пустой мап. Но это зависит от условий задачи