C++ list.remove

Hi,

Also ich befasse mich schon seit ner Weile mit C++, bin aber wohl noch ein Noob ;)
Ich wollte jetzt Listen anfangen, also um viele Objekte kontrollieren zu können:

Code:
for(list<FireBall>::iterator CurFireBall = FireBalllist.begin(); CurFireBall != FireBalllist.end(); ++CurFireBall)
   {
      CurFireBall->Move();
      CurFireBall->Draw(g3d);
      if (CurFireBall->GetY() > g3d->GetHeight()-100)
      {
         FireBalllist.erase(CurFireBall);
      }
   }

FireBalllist und FireBall sind natürlich vohrer deklariert worden und das Programm läuft auch "fast".

Das Problem ist hier das erase(). Es funktioniert zwar in soweit, als dass es das Objekt löscht, aber es bleibt anscheinend immer noch ein Eintrag in der Liste. Nach längerem Recherchieren habe ich .remove() gefunden. Das soll den Eintrag löschen, aber nicht das Objekt.
Leider funktioniert remove natürlich nicht so wie ich das dachte:
Code:
FireBalllist.remove(CurFireBall);
geht nicht. CurFireBall soll ein falscher Parameter sein. Leider habe ich keine Ahnung was ich da reinschreiben soll, obwohl ich diese Fehlermeldung bekomme:
Code:
1>c:\dokumente und einstellungen\all users\dokumente\backup_3\cs_techdemo\cs_techdemo\main.cpp(34) : error C2664: 'std::list<_Ty>::remove': Konvertierung des Parameters 1 von 'std::list<_Ty>::_Iterator<_Secure_validation>' in 'const FireBall &' nicht möglich
1>        with
1>        [
1>            _Ty=FireBall
1>        ]
1>        Ursache: Konvertierung von 'std::list<_Ty>::_Iterator<_Secure_validation>' in 'const FireBall' nicht möglich
1>        with
1>        [
1>            _Ty=FireBall,
1>            _Secure_validation=false
1>        ]
1>        Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
Ich weiß nun, dass ich ein anderen Typ von Parameter benutzten soll, aber ich weiß nicht welchen...
Ich benutze VisualC++ 2005 Express.

hlp plz?

MfG
 
Ok, die Seiten haben mir jetz nicht viel geholfen, aber über sie bin ich zu einer anderen Seite gekommen, die dann das Problem gelöst hat ;) Also thx!

MfG
 
Ups sry, natürlich, also:

Der Fehler lag bei dem erase(). Dieses löscht sowohl den Eintrag, als auch das Objekt. Allerdings war der gelöschte Eintrag immer der letzte (bei dem Testprogramm). Die Liste "rückt automatisch auf". Aber die for schleife war damit noch nicht zu Ende. Der nächste Eintrag sollte also abgefragt werden, obwohl dort nun keiner mehr war.

Ein simples break hat das ganze vorerst gelöst. Allerdings ist diese Lösung noch nicht gut, da es auch rausgeht, wenn der Eintrag nicht am Ende steht. Daran arbeite ich atm noch.

MfG
 
Zurück
Oben