Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Pomozte s programem v C++...

Losi, díky moc! :beer: Nevím, co bych si bez tebe počal... Předělal jsem to teda tak, aby seznamy obsalovaly pointery, ale ještě se mi nepodařilo zprovoznit odebrání studenta ze seznamu na základě jeho id...:-(

Napadly mě dvě varianty, bohužel ani jedna mi nepracuje...
1.

void SeznamStudentu :: odeberStudenta(int id)
{
     list<Student*>::iterator i;
     for(i=studenti.begin(); i != studenti.end(); i++)
      {
       if (((*i)->getId()) == id) studenti.remove((*i));
      }
}
2.
void SeznamStudentu :: odeberStudenta(int id)
{
     list<Student*>::iterator i;
     for(i=studenti.begin(); i != studenti.end(); i++)
      {
       if (((*i)->getId()) == id) studenti.erase(i));
      }
}
Program jde normálně zkompilovat, ale když se pokusím zavolat metodu na odebrání, končím na Windows hlášce, že program provedl neplatnou operaci...:-|

PS: V metodách ještě nemám zohledněné co dělat když se student s daným id nenajde... To dodělám, až mi to bude chodit aspoň takhle.

PSS:
Medota najdiStudenta(int id) mi jede, nedalo by se ji nějak využit při odebíraní?
Student* SeznamStudentu :: najdiStudenta(int id)
{
     list<Student*>::iterator i;
     for(i=studenti.begin(); i != studenti.end(); i++)
      {
       if (((*i)->getId()) == id) return (*i);
      }
      return NULL;
}

Javě by to šlo napsat třeba takto:
 public void odeberStudenta(int id)
 {
    Student s;
    ListIterator <Student> i = studenti.listIterator();
    while(i.hasNext())
      {
        s = (Student)i.next();
        if (s.getId() == id)
        {   
           studenti.remove(studenti.indexOf(s));
        }
        else System.out.println("Student s ID "+id+" nenalezen"); // vyjimka by byla asi lepsi
      }
}

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny