2012-08-12 1 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

+0

제거 할 요소를 가리키는 반복기가 이미 있으므로 목록의 [erase()] (http://www.cplusplus.com/reference/stl/list/erase/) 함수를 사용하지 않으시겠습니까? –

+0

'list :: remove'는 당신이 생각하는 것을 여기서는하지 않는다고 생각합니다. 정말'list :: erase'를 사용하고 싶다고 생각합니다. 업데이트 된 대답을보십시오. – juanchopanza

답변

2
당신은이 같은 문제의 요소를 제거하는 반복자와 std::list::erase을 사용할 수 있습니다

:

wielrennerslist.remove(*iter); 

하지만이 :

wielrennerslist.erase(iter); 

그렇지 않으면, 제거 방법은 다음과 같이 사용되어야한다 방법은 당신이하고 싶다고 생각하는 것을하지 않습니다. 모두 요소는 위치 N에있는 요소의 값과 같습니다. 그러나 이것이 원하는 경우 Wielrenner 객체에 대한 동등 비교가 필요합니다. std::list::remove을 참조하십시오.