Hi,
Auf anraten des Autors des Buches, welches ich grade lese um C++ zu lernen, versuche ich das gelernte Wissen durch experiementieren zu festigen.
Damit das ganze nicht zu langweilig wird hab ich mir selber eine kleine Aufgabe gestellt. Ich versuche grade eine Abfrage zu erstellen die es dem Benutzer erlaubt eine Beliebiege Zahl von Instanzen der Klasse Raumschiffe zu erstellen. Danach wird ein Menue aufgerufen indem man 3 Funktionen zur Auswahl hat.
1. Ein Schiff in die Schlacht schicken wobei es zerstoert wird und aus der Liste geloescht werden soll.
2. Die liste anzeigen
3. Spiel beenden
Das Problem ist nun bei Punkt 1. Wenn ich versuche das betreffende Raumschiff mit " lRaumschiffe.erease (*i); " aus der Liste zu löschen bekomme ich einen Fehler und das Programm stuertz ab. Beim kompelieren erhalte ich allerdings keinen Fehler..
Was ist verkehrt?
Auf anraten des Autors des Buches, welches ich grade lese um C++ zu lernen, versuche ich das gelernte Wissen durch experiementieren zu festigen.
Damit das ganze nicht zu langweilig wird hab ich mir selber eine kleine Aufgabe gestellt. Ich versuche grade eine Abfrage zu erstellen die es dem Benutzer erlaubt eine Beliebiege Zahl von Instanzen der Klasse Raumschiffe zu erstellen. Danach wird ein Menue aufgerufen indem man 3 Funktionen zur Auswahl hat.
1. Ein Schiff in die Schlacht schicken wobei es zerstoert wird und aus der Liste geloescht werden soll.
2. Die liste anzeigen
3. Spiel beenden
Das Problem ist nun bei Punkt 1. Wenn ich versuche das betreffende Raumschiff mit " lRaumschiffe.erease (*i); " aus der Liste zu löschen bekomme ich einen Fehler und das Programm stuertz ab. Beim kompelieren erhalte ich allerdings keinen Fehler..
Was ist verkehrt?
Code:
#include <iostream>
#include <list>
using namespace std;
class CRaumschiff
{
private:
//Membervariablen
int mID;
int mEnergie;
public:
//Memberfunktionen
CRaumschiff (int ID)
{
mID = ID;
cout << "Raumschiff " << mID << " wurde gebaut" << endl;
}
~CRaumschiff ()
{
cout << "Raumschiff: " << mID << " zerstört";
}
//Life abfrage..
bool Lifeabfrage ()
{
if (mEnergie == 0)
{
return true;
}
else
{
return false;
}
}
int IDRueckgabe ()
{
return mID;
}
void Kampf ()
{
mEnergie = 0;
cout << "Raumschiff wurde zerstoert" << mID << endl;
}
};
//Prototypen
void AnzeigeFunktion ();
int main ()
{
//Variablen
list<CRaumschiff*> lRaumschiffe;
list<CRaumschiff*>::iterator i;
int Anzahl;
int Auswahl2 = 0;
cout << "Wieviele Raumschiffe sollen gebaut werden? ";
cin >> Anzahl;
cout << endl;
//Zeiger deklaieren
CRaumschiff *TEMP = NULL;
for(int j=0; j<Anzahl; j++)
{
TEMP = new CRaumschiff(j+1);
lRaumschiffe.push_back(TEMP);
}
//Menue
do {
cout <<"\n\n1) Raumschiffe in die Schlacht schicken: " << endl;
cout << "2) Raumschiffe anzeigen"<< endl;
cout << "3) Beenden"<< endl;
cout << "Eingabe machen: ";
cin >> Auswahl2;
switch(Auswahl2)
{
case(1):
{
cout << "Raumschiff NR? ";
cin >> Auswahl2;
for(i = lRaumschiffe.begin(); i != lRaumschiffe.end(); i++)
{
if ((*i)->IDRueckgabe()== Auswahl2)
{
(*i)->Kampf ();
lRaumschiffe.erase(i);
}
}
}
break;
case(2):
{
cout << "Es befinden sich " << static_cast<int> (lRaumschiffe.size());
cout << " Elemente in der Liste";
}
break;
case(3):
{
}
break;
default:
{
}
}
} while(Auswahl2 != 3);
return 0;
}
void AnzeigeFunktion (list<CRaumschiff> testliste)
{
cout << "Es befinden sich " << static_cast<int> (testliste.size());
cout << " Elemente in der Liste";
}