2012-04-05 28 views
2
list<employee> remove_employees(const string& name, 
           const string& lastname) 
{ 
    list<employee> listOfRemoved; 
    list<employee>::iterator it; 

    for(it=employees.begin(); it != employees.end();) 
    { 
     if(it->get_name() == name && it->get_lastname() ==lastname) 
     { 
      listOfRemoved.push_back(*it); 
      employees.erase(it); 
     } 
     else 
      it++; 
    } 

    return listOfRemoved; 
} 

我試圖從類實例變量員工中刪除一些僱員,然後返回一個新列表,只有刪除的emeployees。當我嘗試運行該程序時,它會從標題中給出錯誤。我知道這與刪除和推送有關,但我無法弄清楚。當試圖從列表中刪除一個元素時,「列表迭代器不兼容」

+0

usluzbenci.erase(它);本來就是爲了員工。在我翻譯整件事的時候忘了它。 – Kajzer 2012-04-05 08:35:37

+0

你能完整發布編譯器消息,包括行號嗎?我剛剛用VS2010和VS2008編譯了這個(爲'employee'添加一個簡單的'struct'後)。 '.erase()'應該在'it'中存儲返回值。 – hmjd 2012-04-05 08:44:19

+0

調試斷言失敗。程序:.... \ vc \ include \ list \ Line:286表達式:列表迭代器不兼容 – Kajzer 2012-04-05 08:49:39

回答

9

變化:

employees.erase(it); 

到:

it = employees.erase(it); 

否則環路it的下一次迭代將涉及到一個無效的元素。 list::erase()返回最後一個被移除的元素後面的迭代器。

[我已經將標題解釋爲編譯器錯誤,而不是運行時錯誤。]

+0

它的工作,謝謝! – Kajzer 2012-04-05 08:57:34

相關問題