Arrayübergabe in einer Klasse
-
Hallo
ich habe in meiner Klasse eine Array Eigenschaft:class Karte { public: Karte(byte _hoehe, byte _breite, Spieler* _spieler, Kiste* _kisten[], byte _kistenAnzahl); ... private: Spieler* spieler; Kiste* kisten[]; //<- Um diese Eiegnschaft geht es vector<string> welt; unsigned char hoehe, breite, kistenAnzahl; };Zur erklärung -> ich möchte ein kleines Game schreiben, das ein Spieler enthält und eben mehrere Kisten. Diese kisten muss der Spielr an eine bestimmte position bringen ^^ (ich glaueb ihr wisst was ich meine ^^) -> Da das Spiel aber nicht nur aus EINER kiste bestehen soll, will ihc das mit einem Array lösen. Diese Arry enthält ZEIGER auf ein Kistenobjekt. Das ksitenobjekt enthält nur Position x und position Y ^^
bisher habe ich es so versucht:
Karte::Karte(byte _hoehe, byte _breite, Spieler* _spieler, Kiste* _kisten[], byte _kistenAnzahl) :hoehe(_hoehe) ,breite(_breite) ,spieler(_spieler) ,kistenAnzahl(_kistenAnzahl) { for(int i=0;i<kistenAnzahl;i++) { kisten[i]=_kisten[i]; } ... }-> Komiler hat zwar nicht rum gemekert aber es geht trozdem nicht -> programm stürzt ab -.-
ich habe den Konstruktur so aufgerfen:Spieler spieler(0,0); Kiste* kisten[2]; kisten[0]= new Kiste(0,1); kisten[1]= new Kiste(2,0); Karte karte(10,10,&spieler,kisten,2);ich hoffe diese Infos reichen -> will ja nicht gleich den ganze Code posten :p
-
Hallo,
Die Größe deines Kistenarrays muss zur Laufzeit bekannt sein wenn du es auf dem Stack anlegen willst. Du kannst es auch dynamisch machen. Am einfachsten wäre es wohl wenn du auch hier einen vector verwendest.
-
ja das mit dem vector habe ich mir auch schon gedacht -> und bin gerade dabei es umzusetzten -> klappt auch wunderbar -> wollte es aber auch mal mit "normalen" Arrays probieren -> da ich mit arrayübergaben immer so meine Probleme habe ^^
-
?
Karte::Karte(Object* objs, std::size_t count) : m_objects(new Object[count]) { std::copy(objs, objs + count, m_objects); } Karte::~Karte() { delete [] m_objects; }oder wie meinst de?
-
Ich fange da immer noch 0 ab.
Karte::Karte(Object* objs, std::size_t count) : m_objects(count ? new Object[count] : 0) { if( count ) std::copy(objs, objs + count, m_objects); }