2012-08-12 85 views
0

我想從我的列表中刪除特定的對象wielrennerslist但是一些如何在編譯時給出錯誤。從列表中刪除特定的對象(C++)

cout << "Wielrenner" << endl; 

list<Wielrenner> wielrennerslist = wielerploegOB.getWielrennersList(); 
cout << "Welke wielrenner wil je verwijderen?" << endl; 

// Alle objecten afprinten in de lijst 
for (list<Wielrenner>::iterator it = wielrennerslist.begin(); it != wielrennerslist.end(); it++) { 
    Wielrenner wielrennerOB = *it; 
    cout << teller << " - " << wielrennerOB.getVoornaam() << " " << wielrennerOB.getAchternaam() << endl; 
    teller++; 
} 
cin >> inputID; 

// Naar het object gaan 
int N = inputID; /* index of the element you want to retrieve */ 
if (wielrennerslist.size() > N) { 
    list<Wielrenner>::iterator iter = wielrennerslist.begin(); 
    std::advance(iter, N); 

    // 'it' points to the element at index 'N' 
    Wielrenner* wielrennerOB2; 
    wielrennerOB2 = &*iter; 

    wielrennerslist.remove(*wielrennerOB2); // something wrong with this? 

    wielerploegOB.setWielrennerList(wielrennerslist); 
}//if 
+2

你得到的錯誤是什麼?你能否注意在這裏正確地縮進你的代碼?每個級別4個空格將會有所斬獲。這使我們更容易閱讀。 – Bart 2012-08-12 12:34:31

+0

既然你已經有一個迭代器指向要刪除的元素,爲什麼不使用列表的[erase()](http://www.cplusplus.com/reference/stl/list/erase/)函數呢? – 2012-08-12 12:43:16

+0

我不認爲'list :: remove'會做你認爲它在這裏做的事情。我想你真的想用'list :: erase',看我更新的答案。 – juanchopanza 2012-08-12 13:15:38

回答

2

可以使用迭代器和std::list::erase要刪除的元素在問題是這樣的:

wielrennerslist.erase(iter); 

否則,remove方法應該用這樣的:

wielrennerslist.remove(*iter); 

但這方法不會做我認爲你想做的事。它會刪除所有元素,它們與位置N上元素的值相等。但是,如果這是你想要的,那麼你需要對Wielrenner對象進行平等比較。見std::list::remove