Arrays treiben mich in den Wahnsinn...
-
Hi Leute, ich hab ein enormes Problem mit Arrays und rumgooglen und in Foren stöbern bringt nichts und ich bin jetzt langsam echt angepisst von C++ und brauche dringend Hilfe ^^
Also folgendes:
Es geht um die Variable "cube"
Headerdatei
class Cube{ public: int cubesize; Stone *cube; Cube() {} Cube(int cubesize); string identifyColor(float color[3]); private: bool isCorner(int x, int y, int z); void setStone(int x, int y, int z); };Cube :: Cube(int sizeOfCube) { cubesize = sizeOfCube; cube = new Stone[cubesize,cubesize,cubesize]; // Zum Start hin wird jeder Stein erstmal leer initialisiert. for(int x = 0; x < cubesize; x++) { for(int y = 0; y < cubesize; y++) { for(int z = 0; z < cubesize; z++) { cube[x,y,z] = Stone(); } } } // Stein vorne oben links mit Farben grün-rot-gelb cube[0,0,0] = Stone(Side::Front, Edge::ELeft, Edge::ETop);hier habe ich nun das Problem, dass nicht nur cube[0,0,0] mit diesem Stein initialisert werden, sondern cube[0,0,x] werden ALLE mit genau dieser Instanz da oben initialisiert. ich weiß nicht was ich dagegen tun kann.
Den Pointer lege ich erst heir fest, da seine Größe zur Laufzeit geändert werden soll. Wenn ich das Ganze versuche so zu machen:
cube = new Stone[cubesize][cubesize][cubesize];meckert der Compiler, weil er unbedingt möchte, das cubesize eine Konstante ist, was ich ihm halt nicht geben kann... auch wenn ich in den Konstruktor folgendes schreibe, meckert er wegen der Konstanten rum
Cube :: Cube(const int sizeOfCube) { cubesize = sizeOfCube; cube = new Stone[sizeOfCube][sizeOfCube][sizeOfCube];Also ich bin irgendwie am Ende mit meinem Latein hier.
Wenn mir irgendwer helfen kann, wäre ich wirklich dankbar
-
Wenn dich Arrays in den Wahnsinn treiben, nimm std::vector.
BTW: cube[0,0,0] tut nicht das, was du vermutest. Da hatten wir gerade erst einen ähnlichen Thread...
-
Du hast Arrays und deren Syntax leider überhaupt nicht verstanden.
Schnapp dir ein Grundlagenbuch, und lern erstmal Grundlagen, bevor sowas kommt:cube[x,y,z] = Stone();Hier schreibst du nichts anderes als einfach
cube[z] = Stone();denn in C++ spricht man Elemente in MD-Arrays durch mehrfache Indize an:
cube[x][y][z] = Stone();Deine Variante dürfte unter anderem ein/zwei Warnung(en) ala "warning: left operand of comma operator is ignored" werfen - gib immer die Compiler-Flags -Wall und -Wextra an!
Nächster Fehler. Du benutzt C-Arrays, also "echte" Arrays. Was du aber mit Sicherheit willst, ist
std::vector. Denn
1. Bin ich sicher, dir ist nicht klar wie einfach es ist, mit manuell allokiertem Speicher ohne entsprechende Absicherungsmethoden (RAII
Smartpointer) Speicherlecks zu erzeugen. Versuche immer, so wenig Speicher wie möglich selbst zu allokieren/zu managen. Dazu gehört auch implizites Zeugs wie createXXX Methodenaufrufe bei APIs, die dann auch noch verlangen, das mitdestroyXXXfreizugeben, weil es sonst gar nicht geschieht. Was für eine Frechheit!
2. Habe ich die (glücklicherweise bisher noch unbegründete) Vermutung, dass du den Speicher nicht mal IRGENDWIE freigibst. Merke: In C++ gibt es keine Garbage Collection, wie bei Javascript, Java, PHP o.ä.
3. Was du willst, sind dynamische Arrays, d. h. solche, die ihre Größe ganz einfach zur Laufzeit ändern können. Die gibt es - man nennt sie STL-Container, und sie sind echt toll, besonders der bereits genannte**std::vector**.
-
Schau mal hier: http://www.c-plusplus.net/forum/307495
Da hab ich gestern zu dieser falschen Schreibweise z.b.: int var [8,9] eine Frage gestellt.
Vector > Arrays

-
Sone schrieb:
Schnapp dir ein Grundlagenbuch, und lern erstmal Grundlagen
Wieso empfiehlst du eigentlich jedem ein Buch. Ich denke, nicht einmal die Hälfte aller Leute, die hier Anfängerfragen stellen, haben vor C++ zu lernen. Viele wollen nur ihre Prüfung/ ihr Semester bestehen.
-
out schrieb:
Sone schrieb:
Schnapp dir ein Grundlagenbuch, und lern erstmal Grundlagen
Wieso empfiehlst du eigentlich jedem ein Buch. Ich denke, nicht einmal die Hälfte aller Leute, die hier Anfängerfragen stellen, haben vor C++ zu lernen. Viele wollen nur ihre Prüfung/ ihr Semester bestehen.
Meldest du dich freiwillig, bei jeder dieser Art von Fragen die ersten drei Kapitel aus einen Buch vorzukauen, so dass man hinterher eine Prüfung bestehen kann?
-
SeppJ schrieb:
out schrieb:
Sone schrieb:
Schnapp dir ein Grundlagenbuch, und lern erstmal Grundlagen
Wieso empfiehlst du eigentlich jedem ein Buch. Ich denke, nicht einmal die Hälfte aller Leute, die hier Anfängerfragen stellen, haben vor C++ zu lernen. Viele wollen nur ihre Prüfung/ ihr Semester bestehen.
Meldest du dich freiwillig, bei jeder dieser Art von Fragen die ersten drei Kapitel aus einen Buch vorzukauen, so dass man hinterher eine Prüfung bestehen kann?
Wieso, solche Fragesteller wollen meist nur eine compilierbare Antwort, mehr nicht.
-
IMHO haben Leute, die nur ihre Prüfung bestehen wollen, keine Antwort verdient. Aber da wir an das gute im Menschen glauben, gehen wir bei jeder Frage davon aus, dass der Fragesteller sich auch für die Materie interessiert.

-
out schrieb:
Wieso, solche Fragesteller wollen meist nur eine compilierbare Antwort, mehr nicht.
Solche Fragensteller gehören aber nicht zur Zielgruppe des Forums. Das ist eher für Leute gedacht, die wirklich was lernen wollen. Wer Komplettlösungen will, soll sich (vermutlich kostenpflichtige) Nachhilfe geben lassen.
-
pumuckl schrieb:
out schrieb:
Wieso, solche Fragesteller wollen meist nur eine compilierbare Antwort, mehr nicht.
Solche Fragensteller gehören aber nicht zur Zielgruppe des Forums. Das ist eher für Leute gedacht, die wirklich was lernen wollen. Wer Komplettlösungen will, soll sich (vermutlich kostenpflichtige) Nachhilfe geben lassen.
touche
