Когда я пытаюсь запустить свою программу, я получаю ошибку «map/set iterator not incrementable». Я читал, что это происходит, когда вы аннулируете итератор, но я только редактирую объекты, на которые указывает итератор. Это нормальное поведение? Что я могу сделать с этим? Если удалить эту строку, то нет никакой ошибки:map iterator not incrementable
iterator->second.neighbour[direction] = &(find_iter->second);
Полный код:
void Gomoku::addUniqueMap(const map_Map& map_to_add)
{
this->unique_maps.push_front(map_to_add);
std::list<map_Map>::iterator map_iter = this->unique_maps.begin();
map_Iterator iterator = map_iter->begin();
for(; iterator != map_iter->end(); ++iterator)
{
for(int i = 1, direction = 0; i > -2; --i)
{
for(int j = -1; j < 2; ++j)
{
if(iterator->second.neighbour[direction] == nullptr)
{
++direction;
continue;
}
if(i == 0 && j == 0)
continue;
COORD pos(iterator->first.x + j, iterator->first.y + i);
wrap(pos, this->map_size);
map_Iterator find_iter = map_iter->find(pos);
if(find_iter != map_iter->end())
{
iterator->second.neighbour[direction] = &(find_iter->second);
}
++direction;
}
}
}
}
'map_Map' - std::map<COORD, Pawn>
'map_Iterator' - std::map<COORD, Pawn>::iterator
'Пешка' -
struct Pawn
{
Pawn(Player player);
Player player;
const Pawn* neighbour[8];
};
Можете ли вы опубликовать тип 'unique_maps'? Вы также должны попытаться удалить 'auto', код будет более понятным (даже если немного более подробным) (используйте typedefs). Возможно, тип, выведенный компилятором для второго 'auto', не является тем, что мы ожидаем, и вы обращаетесь к итератору' end() '. Кроме того, если размер вашей карты равен 1x1, у вас будет' find_iter' == 'итератор'. – Synxis
@Synxis Я заменил авто с типами, но это не помогло. И я никогда не получаю доступ к 'end()' iterator, я всегда проверяю сначала, если итератор не является end(). –
Никогда не устанавливая итератор для 'end()', не означает, что этот итератор не может принимать значение 'end()' ... – Synxis