Arrays von Objekten initialisieren
-
Wow, vielen Dank.
Wahnsinn ich habe ein 400-Seiten-Buch über C++ gelesen, da stand nix darüber... Woher weißt Du sowas?
Nebenbei: Sag bloß, das geht auch mit 3dimensionalen Arrays?
MyClass Array[10][10] = { MyClass(1,1),MyClass(1,2,"echo")};
?
-
Die richtigen Bücher gelesen (und dann praktisch ausprobiert)
Ehe ich es vergesse: Ja, das geht auch mit mehrdimensionalen Arrays
-
vielen Dank! Leider funktioniert es noch nicht.
MenuElem m[10] { MenuElem(1,"Pilot-Profile") };
ergibt beim g++ leider:
./menus.h:59: error: function definition does not declare parameters
was ist hier falsch?
-
Ja, wenn du das = bei der Initialisierung weglässt, gefällt das C++ gar nicht
-
Sry den hab ich voll übersehen. Klappt nun... Nochmals vielen dank!
-
oha...
string s[2] = { string(0,"hi"),string(1,"echo")};
geht gar nicht... das erste argument (0 und 1) ist doch gar kein index-Argument, oder?
string s[2] = { string("hi"),string("echo")};
so geht es dann nämlich...
-
voidpointer schrieb:
oha...
string s[2] = { string(0,"hi"),string(1,"echo")};
geht gar nicht... das erste argument (0 und 1) ist doch gar kein index-Argument, oder?
Nein, die Argumente werden so, wie sie dort angegeben sind, an deinen Konstruktor weitergegeben - der Index der entsprechenden Elemente ergibt sich aus der Reihenfolge, in der sie genannt werden (du kannst nur die ersten n Elemente initialisieren und nicht einzelne Elemente herauspicken).
(obwohl, ich meine micht zu erinnern, daß man in C99 festlegen konnte, welche Array-Elemente initialisiert werden sollten)
-
Danke. Nun wollte ich das ganze noch in den Konstruktor eines Objekts (namens MyMenuBar) rein hauen (weil das Array erst dann initialisiert werden darf)... leider geht das nicht so leicht
MenuElem all_menu_items[3]; //... MyMenuBar( void ): all_menu_items( { MenuElem("Pilot-Profile"), MenuElem("Update"), MenuElem("Bla") } ) { /* konstruktor */ }
der compiler behauptet:
./menus.h:89: error: expected primary-expression before ‘{’ token
./menus.h:89: error: bad array initializer(wie) ist so etwas möglich? o_O
-
Ger nicht - C Initialisierungslisten und C++ Konstruktoren sind nicht wirklich miteinander kompatibel. d.h. du mußt das Array im Ctor-Rumpf von Hand befüllen.
-
Ginge es denn eigtl. so, dass man die Array-elemente alle einzeln initialisiert??
MainWindow::MainWindow(void) :img[0](this,"images/label/d.png",'D'), // Fehler 1 (img[1])(this,"images/label/d.png",'3'), // Fehler 2 //...
Ich bekomme andauernd Fehler:
Fehler 1:
g++ schrieb:
error: expected `{' before ‘[’ token
Fehler 2:
g++ schrieb:
error: anachronistic old-style base class initializer
Gruß,
voidpointer
-
CStoll schrieb:
Ger nicht - C Initialisierungslisten und C++ Konstruktoren sind nicht wirklich miteinander kompatibel. d.h. du mußt das Array im Ctor-Rumpf von Hand befüllen.
Gilt auch im neuen Jahr
-
Mensch bin ich vergesslich
Is halt echt nen riesen-Nachteil von C++
So kann ich in vielen fällen keine Konstanten Variablen in meine Objekte einbauen...