Gustav Gans
Grünschnabel
Hallo zusammen!
Dieses ist mein erster Forumseintrag (grade registriert)
Ich habe vor 2 Tagen angefangen mich mit OOP in C++ zu beschäftigen und erstelle stückchenweise mit neu Gelerntem ein kleines Konsolen Strategiespielchen, damit ich alles gleich in der Praxis ausprobieren kann. Als Vorkenntnisse habe ich etwas Erfahrung mit C gemacht (Kontrollstrukturen, Funktionen, Arrays, Strings, Zeiger(naja...) und Strukturen).
Ich habe mit großem Interesse schon lange im Forum nach einem vergleichbaren Problem geschnüffelt, aber leider nichts gefunden. Aber viele sehr gute andere Beiträge!
Zu meinem Problem...
Ich habe eine Klasse "kaserne" und eine Klasse "soldat". Ich möchte nun eine Methode in "kaserne" mit der ich Instanzen aus "soldat" bilden kann.
Mein erster Ansatz für eine solche Methode sah so aus:
Bei "soldat_no" handelt es sich um eine static int Variable aus der Klasse "kaserne" mit 1 initzialisiert.
Der Compiler (Dev C++ und Codeblocks) spuckt dazu folgende Fehlermeldung aus:
Nachdem ich nun knapp 10 Stunden recherchiert habe, wurde Folgendes aus der Methode:
Auch hier die gleich Fehlermeldung.
Würde mich auch freuen wenn die Instanzen nicht extra in den Heap geschrieben würden, weil ich den Sinn und Zweck des Heaps noch nicht verstanden habe. Außerdem frage ich mich ob das Array "einheiten[soldat_no]" wirklich sein muss, weil ich befürchte, dass im Stack durch das schrittweise Vergrößern des Feldes Chaos entsteht. Habe das Array auf diese Weise deklariert, weil ich nicht weiß wie viele Soldaten im Spiel erstellt werden.
Hier noch der Rumpf des überladenen Konstrukors der Klasse "soldat" (vielleicht steckt mein Problem ja schon hier?!)
Wie man schon sieht handelt es sich bei Soldat um die Kindsklasse von der Klasse "einheit". Die Kaserne ist Kindsklasse von "building".
Der komplette Quelltext ist mit mittlerweile 280 Zeilen wohl zu lang für diesen Post(ist ja schon lang genug). Aber natürlich kann ich andere Teile nachliefern oder auch den ganzen Quelltext.
Vielleicht kann mir jemand bei meinem Problem helfen und Danke fürs durchlesen.
Dieses ist mein erster Forumseintrag (grade registriert)

Ich habe vor 2 Tagen angefangen mich mit OOP in C++ zu beschäftigen und erstelle stückchenweise mit neu Gelerntem ein kleines Konsolen Strategiespielchen, damit ich alles gleich in der Praxis ausprobieren kann. Als Vorkenntnisse habe ich etwas Erfahrung mit C gemacht (Kontrollstrukturen, Funktionen, Arrays, Strings, Zeiger(naja...) und Strukturen).
Ich habe mit großem Interesse schon lange im Forum nach einem vergleichbaren Problem geschnüffelt, aber leider nichts gefunden. Aber viele sehr gute andere Beiträge!
Zu meinem Problem...
Ich habe eine Klasse "kaserne" und eine Klasse "soldat". Ich möchte nun eine Methode in "kaserne" mit der ich Instanzen aus "soldat" bilden kann.
Mein erster Ansatz für eine solche Methode sah so aus:
Code:
void kaserne::create_soldat()
{
char tmp[3];
sprintf(tmp,"%i",soldat_no);
string no=tmp;
string typ="soldat";
soldat (typ + no)(soldat_no, "Soldat", 2, 3, 4, 5);
soldat_no++;
}
Bei "soldat_no" handelt es sich um eine static int Variable aus der Klasse "kaserne" mit 1 initzialisiert.
Der Compiler (Dev C++ und Codeblocks) spuckt dazu folgende Fehlermeldung aus:
Code:
main.cpp: In member function `void kaserne::create_soldat()':
main.cpp:265: error: no matching function for call to `soldat::soldat(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
main.cpp:38: note: candidates are: soldat::soldat(const soldat&)
main.cpp:165: note: soldat::soldat(int, std::string, float, float, float, float)
main.cpp:159: note: soldat::soldat()
main.cpp:268:1: unterminated comment
make.exe: *** [main.o] Error 1
Nachdem ich nun knapp 10 Stunden recherchiert habe, wurde Folgendes aus der Methode:
Code:
void kaserne::create_soldat()
{
soldat* einheiten[soldat_no];
for(int i=0; i<=soldat_no; i++)
{
char tmp[3];
sprintf(tmp,"%i",soldat_no);
string no=tmp;
string typ="soldat";
einheiten[i]= new soldat(typ + no, "Soldat", 2, 3, 4, 5);
soldat_no++;
}
}
Auch hier die gleich Fehlermeldung.
Würde mich auch freuen wenn die Instanzen nicht extra in den Heap geschrieben würden, weil ich den Sinn und Zweck des Heaps noch nicht verstanden habe. Außerdem frage ich mich ob das Array "einheiten[soldat_no]" wirklich sein muss, weil ich befürchte, dass im Stack durch das schrittweise Vergrößern des Feldes Chaos entsteht. Habe das Array auf diese Weise deklariert, weil ich nicht weiß wie viele Soldaten im Spiel erstellt werden.
Hier noch der Rumpf des überladenen Konstrukors der Klasse "soldat" (vielleicht steckt mein Problem ja schon hier?!)
Code:
soldat::soldat(int bezeichnung, string type, float preis, float hp, float schutz, float speed) : einheit(bezeichnung, type, preis, hp, schutz, speed)
{
cout<<"Soldat wurde ausgebildet"<<endl;
}
Wie man schon sieht handelt es sich bei Soldat um die Kindsklasse von der Klasse "einheit". Die Kaserne ist Kindsklasse von "building".
Der komplette Quelltext ist mit mittlerweile 280 Zeilen wohl zu lang für diesen Post(ist ja schon lang genug). Aber natürlich kann ich andere Teile nachliefern oder auch den ganzen Quelltext.
Vielleicht kann mir jemand bei meinem Problem helfen und Danke fürs durchlesen.