簡體   English   中英

運行時錯誤:運行時錯誤:映射/設置迭代器不兼容

[英]Runtime Error : RunTime Error : map/set iterators incompatible

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();
    }
}

在“調試”中,請注意,該項目在第一次出現時就掉線了。

感謝幫助。

GetTasks()會在調用時創建新的地圖/集合並返回嗎? 還是在引用適當的地方返回集合的副本?

如果是這種情況,則每次對GetTasks()調用GetTasks()返回一個新對象,該對象獨立於先前返回的對象。 將這些對象之一的迭代器與另一個此類對象的迭代器(例如begin()end()迭代器)進行比較是沒有意義的。

確保所有迭代器都來自同一對象,而不是來自同一數據的不同副本。


可能您希望GetTasks()函數返回引用或const引用,具體取決於Simulation對象的常量:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM