C++ 运行时错误:运行时错误:映射/设置迭代器不兼容 void管理器::模拟(军事*军事,Shalishut*Shalishut,char*args[]){ Simulation*Simulation=Simulation::GetInstance(); Time*Time=Time::GetInstance(); 多重映射::常量迭代器; itTasks=simulation->GetTasks().begin(); while(itTasks!=模拟->GetTasks().end()){ 而(任务->秒->GetTimeStamp()==时间->GetTime()){ //任务执行(任务->第二,军事,沙利舒特,阿格斯); ITTASK++; } //单位乘用车 时间->时间增加(); } }

C++ 运行时错误:运行时错误:映射/设置迭代器不兼容 void管理器::模拟(军事*军事,Shalishut*Shalishut,char*args[]){ Simulation*Simulation=Simulation::GetInstance(); Time*Time=Time::GetInstance(); 多重映射::常量迭代器; itTasks=simulation->GetTasks().begin(); while(itTasks!=模拟->GetTasks().end()){ 而(任务->秒->GetTimeStamp()==时间->GetTime()){ //任务执行(任务->第二,军事,沙利舒特,阿格斯); ITTASK++; } //单位乘用车 时间->时间增加(); } },c++,iterator,while-loop,C++,Iterator,While Loop,在调试过程中,请注意,项目在第一次调试时失败 谢谢您的帮助。调用时,GetTasks()是否创建一个新的映射/集,并返回该映射/集?或者它是否返回一个集合的副本,其中引用是合适的 如果是这种情况,那么每次调用GetTasks()都会返回一个新对象,该对象独立于以前返回的对象。将其中一个对象的迭代器与另一个此类对象的迭代器(如begin()和end()迭代器)进行比较是没有意义的 确保所有迭代器都来自同一对象,而不是来自同一数据的不同副本 您可能希望GetTasks()函数返回一个引用或常量引用

在调试过程中,请注意,项目在第一次调试时失败

谢谢您的帮助。

调用时,
GetTasks()
是否创建一个新的映射/集,并返回该映射/集?或者它是否返回一个集合的副本,其中引用是合适的

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

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


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

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();
    }
}
类模拟{
...
multimap&GetTasks(){return m_tasks;}
const multimap&gettask()const{return m_tasks;}
}

没有理由让它破裂。你一行一行地检查过代码了吗?while循环是否运行过?模拟指针有效吗?它给出的确切错误是什么?所有基本任务()只返回一个映射,不创建它。类模拟{private:Simulation();Simulation(const Simulation&Simulation);~Simulation();multimap m_任务;静态模拟*m_模拟;公共:静态模拟*GetInstance();multimap gettask()const{return m_tasks;}int GetNumOfTasks()const{return m_tasks.size();}bool AddTask(Task*Task);void ShowTasks()const;};multimap GetTasks()-正在返回映射的副本我如何返回指向multimap的指针而不是副本?multimap*gettask()const{return&m_tasks();}
class Simulation {
   ...
   multimap<int,Task*>& GetTasks() { return m_tasks; } 
   const multimap<int,Task*>& GetTasks() const { return m_tasks; } 
}