运行时错误:运行时错误:映射/设置迭代器不兼容

时间:2010-09-22 18:23:25

标签: c++ iterator while-loop

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 个答案:

答案 0 :(得分:2)

GetTasks()在调用时会创建一个新的map / set,并返回吗?或者它是否返回适当引用的集合的副本?

如果是这种情况,则每次调用GetTasks()都会返回一个独立于以前返回的对象的新对象。将其中一个对象的迭代器与另一个此类对象的迭代器(如begin()end()迭代器)进行比较是没有意义的。

确保所有迭代器都来自同一个对象,而不是来自相同数据的不同副本。


您可能希望GetTasks()函数返回引用或const引用,具体取决于Simulation对象的常量:

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