Arrays von Klassen
-
Gib Beispielcode.
-
kj6938s schrieb:
Ich vermute mal Sie haben das Problem nicht verstanden
Ich glaube, du hast die Ironie nicht verstanden. An Hand der Informationen, die du uns gibst, kann keine brauchbare Hilfe gegeben werden. Der Inhalt deines Beitrags lässt sich auf "Ich mache irgendwas mit Klassen und Arrays und mein Programm stürzt ab." reduzieren. Wie man Fragen richtig stellt.
Ansonsten hat Techel ja schon nach Quelltext gefragt, der den Fehler produziert. Hast du schon ein Mal mit dem Debugger geschaut, wo in deinem Programm der Fehler auftritt?
-
Ja ich hoffe hieraus wird mein Problem klar:
ich versuche in Class2 ein Array mit Instanzen von Class1 zu erzeugen. Sobald ich den Konstruktor von Class2 aufrufe und das Programm ausführe stürtzt mein Programm mit der Fehlermeldung "...exe reagiert nicht mehr" ab. Wenn ich aber z.B. das Array auf 5 Instanzen begrenze funktioniert es einwandfrei, jedoch würde ich gerne z.B. 10 nutzen. Gibt es dafür eine Möglichkeit?
//class1.h class Class1 { int n; Class1() { } }; //class2.h Class Class2 { Class1 class1Arr[10]; Class2() { } };
-
Gib ein kompilierbares (!) Minimalbeispiel oder verwende zumindest copy+paste (denn Class Class2 sollte wohl class Class2 sein und wird nicht einmal kompilieren). Du hast aus dem Beispiel wohl alles, das irgendwie relevant wäre, rausgelöscht, sodass man dir nicht helfen kann.
-
Auch daraus wird man nicht schlau. Dein Hinweis, dass es mit 5 Objekten geht, mit 10 aber nicht deutet vage darauf hin, dass dein
Class1Objekt riesig ist und den Stack sprengt. Kann man aber nxi zu sagen, weil du keinen relevanten Quelltext postest.
-
Wenn das so sein sollte (mit der Größe), dann nimm noch einfach einen
std::vector<std::unique_ptr<Class2>>in deiner Class1.
-
1<->2 umgekehrt natürlich, sorry.
-
Also ich poste mal den Code ich dachte damit kann man weniger anfangen, als wenn ich das Problem schildere.
//Klasse 1 #ifndef FRAME_H #define FRAME_H #include "Cell.h" class Frame { private: public: Cell C[10]; //mit 5 klappt es hier Frame(); ~Frame(); friend class XML_DATA; }; #endif // FRAME_H //Klasse 2 #ifndef CELL_H #define CELL_H #include "Segment.h" class Cell { private: public: Segment Seg[20]; Cell(); ~Cell(); friend class Frame; }; #endif // CELL_H //Klasse 3 #ifndef SEGMENT_H #define SEGMENT_H #include "Point.h" #include "Boom.h" #include "Shear_Panel.h" #include "Skin_Panel.h" #include "Free_Panel.h" class Segment { private: public: Point P[100]; Boom B[10]; Shear_Panel Shear_P[10]; Skin_Panel Skin_P[10]; Free_Panel Free_P[10]; Segment(); ~Segment(); }; #endif // SEGMENT_H
-
dass dein bsp sich noch immer nicht compilieren lässt, ist dir aufgefallen?
DocShoe schrieb:
darauf hin, dass dein
Class1Objekt riesig ist und den Stack sprengtso scheint es tatsächlich:
FRAME_ANZAHL*10*20*(sizeof(Point)*100+sizeof(Boom)*10+sizeof(Shear_Panel)*10+sizeof(Skin_Panel)*10+sizeof(Free_Panel)*10)Bytes.
Und vermutlich erstellst du frame auf dem stack. kann man aber nicht sagen, weil die hälfte fehlt.
-
Ersetze einfach alle Arrays durch entsprechende
std::vector, damit sollte zumindest das Stack-Problem gelöst sein. Du musst dann lediglich das Befüllen der einzelnen Objekte anpassen.
-
Vielen Dank für eure Antworten! Ich werde es mal so probieren und schauen ob es so dann funktioniert.