Structur initialisieren
-
Hallo,
wo kann ich eine struct initialisieren, im Header geht es nicht
struct GESAMT { TColor Color; int Time; }; GESAMT** Pointer; GESAMT S1 = {clRed,1000}; //Fehler im Header.
Ich könnte eine Instanz von GESAMT im Konstruktor erzeugen und dann
initialisieren,GESAMT S1 = {clRed,1000}; //So gehts.
habe dann aber eine lokale Instanz im Konstruktor.
S1 = {clRed,1000} //Fehler
-
Gib deiner struct doch einen Konstruktor und initialisier sie da.
Was genau willst du erreichen?
-
Hallo,
ich möchte die struct mit
GESAMT S1 = {clRed,1000} initialisieren, anstatt
jeden Member extra zu initialisieren.
S1.Color = clRed;
S1.Time = 1000;Die Structuren sollen Phasen einer Ampelsteuerung an einer Kreuzung sein.
(Farben und Zeitdauer der Phase)
Der Member Time stellt die Länge der Phase da die in den Timerinterval
geschrieben wird. Die Pointer der Structs werden in das Pointer Array
geschrieben, so kann über ein Index jede Phase nach und nach ausgeführt werden.Gib deiner struct doch einen Konstruktor und initialisier sie da.
Wie würde soetwas aussehen?
-
-
Hallo,
das mit dem Konstruktor einer Klasse ist mir schon klar, er wird jedesmal
ausgeführt wenn ein Objkt der Klasse instanziert wird.Aus dem Beispiel Grundlagen
class Integer { public: Integer(int dummy) { } }; void foo(Integer dummy) { } int main() { foo(5); }
Es gibt die Klasse Integer mit dem Konstruktor Integer(int dummy);
Nun existiert eine Funktion foo mit dem Übergabeparameter dummy des
Typs Integer. Wird nun jedesmal beim Aufruf von foo der Konstruktor
mit ausgeführt oder wie muss man das verstehen?class Test { private: struct A { int X; int Y; } }
Und wie bekommt die struct nun einen Konstruktor?
-
So gehts
struct TEST { TColor Color; int Time; TEST(TColor uColor, int uTime){Color = uColor;Time = uTime;} };
Das ganze ist mir allerdings nicht so ganz klar.
class Integer { public: Integer(int dummy) { } }; void foo(Integer dummy) { } int main() { foo(5); }
-
Hallo,
So gefällt mir der Konstruktor besser (ist hier aber Ansichtssache)struct TEST { TColor Color; int Time; TEST(TColor uColor, int uTime) : Color(uColor), Time(uTime) {} };
Ich verwende halt lieber Inititialisierungslisten und finde es ist besser, wenn man sich gleich daran gewöhnt.
Eine Initialisierung eines bestehenden Objektes von TEST könnte dann so erfolgen.TEST S1(clBlue, 10); // neu initialisieren S1 = TEST(clRed, 1000);
Übrigens kann in deiner struct TEST jetzt nur noch eine Instanz mit Hilfe des dort stehenden Konstruktors erstellt werden. Der Defaultkonstruktor (ohne Argument) existiert jetzt nicht mehr. Wenn du ihn brauchst, mußt du ihn extra noch hinzufügen oder den obigen Konstruktor mit default-Argumenten erweitern.
z.Bsp. sostruct TEST { TColor Color; int Time; TEST(TColor uColor = clRed, int uTime = 1000) : Color(uColor), Time(uTime) {} };
Zur zweiten Frage
Beim Aufruf von foo(5) wird der Konstruktor von Integer aufgerufen und somit eine Instanz von Integer erstellt, die nur innerhalb von foo gültig ist.
-
Danke für die super Hilfe.
TEST(TColor uColor, int uTime) : Color(uColor), Time(uTime)
erinnert an
TForm1::TForm1(TComponent* Owner) : TForm(Owner)
Wie war das auch noch mit dem :?