gpt4 book ai didi

c++ - 运行时错误 : RunTime Error : map/set iterators incompatible

转载 作者:行者123 更新时间:2023-11-28 03:55:36 25 4
gpt4 key购买 nike

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 中注意到项目在第一个 while 时失败。

感谢您的帮助。

最佳答案

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

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

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


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

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

关于c++ - 运行时错误 : RunTime Error : map/set iterators incompatible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com