struct initialisieren ?
-
Hallo
bei folgendem Beispiel bekomme ich die Fehlermeldung 'Klassenelement kann hier nicht initialisiert werden'.
Wie initialisiere ich solch eine Struktur ??struct DdsLoadInfo { bool compressed; bool swap; bool palette; unsigned int divSize; unsigned int blockBytes; GLenum internalFormat; GLenum externalFormat; enum type{}; }; DdsLoadInfo loadInfoBGR5A1 = {false, true, false, 1, 2, GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}; . . .
-
Hallo
du brauchst für die Initialisierung der struct-Werte einen Konstruktor für den struct-typ, wie bei einer Klasse.
bis bald
akari
-
danke, wäre es möglich, dies mir an einem Beispiel zu zeigen ?? Ist etwas verwirrend in der Online Hilfe.
-
Hallo
sorry, da hab ich wohl falsch gelegen. Das sollte auch so gehen
struct DdsLoadInfo { bool compressed; bool swap; bool palette; unsigned int divSize; unsigned int blockBytes; GLenum internalFormat; GLenum externalFormat; enum MyType{GL_UNSIGNED_SHORT_1_5_5_5_REV,... /*weiter Wert*/} MyEnum; // passende Namen für Typ des Enums und den Member des structs von Typ des Enums }; DdsLoadInfo loadInfoBGR5A1 = {false, true, false, 1, 2, GL_RGB5_A1, GL_BGRA, DdsLoadInfo::GL_UNSIGNED_SHORT_1_5_5_5_REV};Du kannst aber trotzdem einen vernünftigen Konstruktor anfertigen.
bis bald
akari
-
unabhängig vom Aufzählungstyp enum kommt die gleiche Fehlermeldung. Wenn ich das so kürze funktioniert das auch nicht.

Syntax falsch ?struct DdsLoadInfo { bool compressed; bool swap; bool palette; }; DdsLoadInfo loadInfoBGR5A1 = {false, true, false};
-
Hallo
bei mir (BCB 5) wird auch dein letztes Beispiel korrekt kompiliert und ausgeführt. DU must mal schauen, ob du nicht woanders noch einen Fehler hast, der erst dort an dieser Stelle vom Compiler gemerkt wird.
bis bald
akari
-
ich habe BCB6 und nur als test diesen code, also nix anderes noch.
Felermeldung E2233Einzelne Elemente einer Struktur, Union oder Klasse in C++ können keine Initialisierer haben.
Eine Struktur oder Union kann als Ganzes mit Initialisierungswerten in geschweiften Klammern initialisiert werden.
Eine C++ Klasse kann nur durch einen Konstruktor initialisiert werden.
Also ich habe das in die 'public:// Anwender-Deklarationen' geschrieben.
-
Hallo
ah... jetzt kommen wir der Sache schon näher, du darfst sowas nicht in einer Klasse (dem Form in diesem Fall) machen. Dazu must du wie schon gesagt Konstruktoren einsetzen
struct DdsLoadInfo { bool compressed; bool swap; bool palette; unsigned int divSize; unsigned int blockBytes; GLenum internalFormat; GLenum externalFormat; enum MyType{GL_UNSIGNED_SHORT_1_5_5_5_REV,... /*weiter Wert*/} MyEnum; // Konstruktor des Structs mit der Initialisierungliste der einzelnen Member DdsLoadInfo() : compressed(false), swap(true), palette(false), int divSize(1), blockBytes(2), internalFormat(GL_RGB5_A1), externalFormat(GL_BGRA), MyEnum(GL_UNSIGNED_SHORT_1_5_5_5_REV) {}; }; ... __private : ... DdsLoadInfo loadInfoBGR5A1; // Deklaration des Struct-Members des Forms // dann in der Implementaion des Konstruktors des Forms den Konstruktor // für das struct-Member ausführen __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), loadInfoBGR5A1() { }Das sind alles Grundlagen der OOP, die du auch im Builder brauchst, also solltest du dich besser damit vertraut machen
bis bald
akari
-
oh danke !
was empfiehlst Du für Literatur in Bezug auf diese Dinge ??
-
Hallo
schau einfach mal auf dieser Seite im Menü oben rechts, da sind zwei Links Bücher und Tutorials. Außerdem gibts es auch schon genug Threads zum Thema Bücher.
bis bald
akari
-
ok danke
