init struct
-
wenn ich definiere ein struct mit 20 Einträge in hxx,
da in hxx darf ich die Elementen nicht initialisieren, muss ich eben in cpp tun.
aber ich will nicht 20 Zeilen draus machen,was soll ich tun?
-
Geht das auch klarer? Selbst nach mehrmaligem Durchlesen habe ich keine Ahnung, was du eigentlich vorhast.
-
sivherlich das er ein struct mit 20 "membern" hat, und diese nicht von hand initialisieren will.
beispiel
struct bla { int t1; int t2; int t3; ... int t20; }blablubb; void init() { blablubb.t1=1; blablubb.t2=2; ... blablubb.t20=20; }habe ich das richtig verstanden?
-
ser1al schrieb:
sivherlich das er ein struct mit 20 "membern" hat, und diese nicht von hand initialisieren will.
beispiel
struct bla { int t1; int t2; int t3; ... int t20; }blablubb; void init() { blablubb.t1=1; blablubb.t2=2; ... blablubb.t20=20; }habe ich das richtig verstanden?
nein, z.B
struct { int sMatrikelnummer, std::string sName, std::string sAnschrift, std::string sTelnummer, ... };jetzt in cpp möchte ich die deklarieten Einträge initialisieren (sie müssen nicht gleiche Typen haben)
-
Versuch's mal mit einem Konstruktor.
-
es ist doch der selber, innerhalb eines Ctor musst du auch die 40 Einträge initialisieren
-
Wenn du 40 Struct-Elemente mit Werten belegen willst, bleibt dir nichts anderes übrig als jedem dieser Elemente seinen Wert zuzuweisen.
(alternativ könntest du dich auch darauf verlassen, daß ein leerer Konstruktor alle Elemente leer vorbelegt (Zahlen mit 0, Klassen per Default-Ctor) und nur die Elemente zuweisen, die einen anderen Wert benötigen)
-
naja, mein beispiel stimmt dann schon, ich wollte nur das prinzip zeigen, und da war es mir zu umständlich immer std::string zu schreiben, darum habe ich nur ints genommen!
Der datentyp spielte ja aber keine rolle, sondern nur das initialisieren, und da kann ich mich nur meinem vorredner anschließen!
-
CStoll (off) schrieb:
alternativ könntest du dich auch darauf verlassen, daß ein leerer Konstruktor alle Elemente leer vorbelegt (Zahlen mit 0, Klassen per Default-Ctor)
Für Builtins ist das in einem Konstruktor aber nicht wahr, wenn sie dort in der Initialisierungsliste weglässt. Da bleiben die unitialisiert.
Das man machen könnte, wäre ein leerer Initialisierer:
struct XXX { ... }; XXX x = {}; // alle Elemente default-initialisierenBedingt aber, dass alle Elemente auch default-initialisierbar sind.
-
7H3 N4C3R schrieb:
CStoll (off) schrieb:
alternativ könntest du dich auch darauf verlassen, daß ein leerer Konstruktor alle Elemente leer vorbelegt (Zahlen mit 0, Klassen per Default-Ctor)
Für Builtins ist das in einem Konstruktor aber nicht wahr, wenn sie dort in der Initialisierungsliste weglässt. Da bleiben die unitialisiert.
Das man machen könnte, wäre ein leerer Initialisierer:
struct XXX { ... }; XXX x = {}; // alle Elemente default-initialisierenBedingt aber, dass alle Elemente auch default-initialisierbar sind.
dann ist x nicht nur in cpp initialisiert worden, sondern auch definiert!
ich will aber struct in hpp bzw. innerhalb einer Klasse definieren, dann in der entsprechenden cpp initialisieren (z.B. in Ctor dieser Classe)