Struct mit unterschiedlich großen Arrays als Inhalt
-
Hallo allerseits!
Ich habe ein Problem mit Structs in einem Programm. Es geht dabei um das Struct "generator". Ein "generator" soll prinzipiell ein array vom typ "event", "state" und "transition" haben. Leider brauche ich mehrere "generator"s deren arrays "event" etc. leider auch unterschiedlich viele Einträge haben können.
struct event{ string name; int priority; string plc_ioaddress_1; string plc_ioaddress_2; char edge_ind; bool ctrl; bool shrd; }; struct transition{ int prevstate; int newstate; event trans_event; }; struct state{ int statenumber; bool initial; bool marked; }; struct generator { string name; state states[]; event events[]; transition tranitions[]; } generators[2];Nun habe ich versucht, einem "generator" ein array folgendermaßen zuzuweisen:
generators[0].name = "gen1"; generators[0].states = states1; generators[0].events = events1; generators[0].transitions = transitions1;Wobei "states1", "events1" und "transitions1" von mir erstellte arrays sind. Der Compiler beschwert sich nun und meint:
error: invalid array assignmentWoran liegt das und wie kann ich das beheben?
Mfg,
Frank
-
Du kannst arrays nicht zuweisen. Wenn du die feste größe von Anfang an kennst, nimm std::array, ansonsten std::vector.
-
struct generator { string name; state *states; event *events; transition *tranitions; } //Später: generator *generators = new generator[2]; generators->states = new state[10]; //...Wenn ich richtig verstanden habe was du meinst... Die schönere Alternative wäre aber das Container-Gedöns von 231442352532523456363.
-
Hallo!
Ich kenne für jeden einzelnen "generator" die größe von dessen "event", "state" und "transition" arrays.
Wie mache ich jetzt, dass "generators[0]" ein state array der Größe 10 bekommt, und "generators[1]" ein states array der Größe 4?
Was genau macht das hier?
generators->states = new state[10];Heißt das nicht, dass von jedem "generator" im array "generators" das array states immer die Länge 10 hat?
Danke schonmal für die Antworten,
MFG
Frank
-
Wenn jeder generator 10 XY hat, dann nimm std::array:
std::array<XY, 10> xys;
-
Wenn jeder generator 10 XY hat, dann nimm std::array:
Nein, das ist ja gerade nicht der Fall. Was ich genau machen möchte steht in meine vorherigen Beitrag. Sorry wenn das vorher unverständlich formuliert war.
mfg,
Frank
-
Selbst mit einem unbestimmten Array am Ende der struct ist das afaik undefiniertes Verhalten. Die Lösung für dich wurde schon genannt: verwende std::vector<> anstelle dieser Arrays.