В моем проекте в Visual C ++ в Visual Studio 2015 я использовал ссылки на итераторы.
Сегодня я обновился до vs2017, но, похоже, компилятор изменился больше, чем я думал.Надеюсь, я смогу решить большинство проблем, но некоторые я не знаю, почему это изменится.
Например, я использовал фрагмент
for (auto& it = stack.begin(); it != stack.end() /* not hoisted */; /* no increment */)
{
if (it->second->empty()) { stack.erase(it++); } // or "it = m.erase(it)" since C++11
else
{
auto obj = move(it->second);
stack.erase(it);
return move(obj);
}
}
, где stack
- это std::map<float, std::unique_ptr<StackableObj>
.
Раньше все работало нормально, но в vs2017 не компилируется, вместо этого выдается ошибка типа
Error C2440 'initializing': cannot convert from 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>' to 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &'.
Что мне делать с этим или где искать, чтобы узнатьчто изменилось?Попытка гуглить некоторые термины не дала никаких конкретных ответов на происходящее.
Заранее спасибо