Ошибка времени выполнения: ошибка времени выполнения: сопоставление и установка итераторов несовместимы - PullRequest
0 голосов
/ 22 сентября 2010
void Manager::Simulate(Military* military, Shalishut* shalishut,char* args[]){
    Simulation* simulation = Simulation::GetInstance();
    Time* time = Time::GetInstance();
    multimap<int,Task*>::const_iterator itTasks;
    itTasks = simulation->GetTasks().begin();
    while(itTasks != simulation->GetTasks().end()){
        while (itTasks->second->GetTimeStamp() == time->GetTime()){
            //TaskExecute(itTasks->second,military,shalishut,args);
            itTasks++;
        }
        // Unit take car of vehicles
        time->TimeIncrease();
    }
}

в Debug замечает, что проект падает, когда дело доходит до первого времени.

спасибо за помощь.

1 Ответ

2 голосов
/ 22 сентября 2010

Создает ли GetTasks() новую карту / набор при ее вызове и возвращает ее? Или это возвращает копию набора, где ссылка была бы уместна?

Если это так, то каждый вызов GetTasks() возвращает новый объект, который не зависит от ранее возвращенных объектов. Сравнение итератора одного из этих объектов с итератором другого такого объекта (например, итераторов begin() и end()) не имеет смысла.

Убедитесь, что все ваши итераторы исходят из одного и того же объекта, а не из разных копий одних и тех же данных.


Возможно, вы хотите, чтобы функция GetTasks() возвращала ссылку или константную ссылку, в зависимости от константности объекта Simulation:

class Simulation {
   ...
   multimap<int,Task*>& GetTasks() { return m_tasks; } 
   const multimap<int,Task*>& GetTasks() const { return m_tasks; } 
}
...