Klassen in Klassen?? UNMOEGLICH?
-
Moin,
sitze hier an nem ziemlichen Problem, was mir C++ immer wieder auferlegt. Ich mach grad nen fenster mit ner GUI. Da müssen in eine Klasse ne ganze Menge anderer Klassen rein.
Das Problem: Bestimmte Klassen MUSS ich mit einem sinnvollen Konstruktor aufrufen, z.b.:
class A { string str("hi"); }
Dies GEHT NICHT. Compiler sagt zu der 2ten Zeile:
error: expected identifier before string constant
error: expected ‘,’ or ‘...’ before string constantIst eigtl. auch logisch, man kann ja in einer Klasse nur definieren, nicht deklarieren...
ABER:
class A { string str; }
Das GEHT! Warum??? Eine Deklaration kann das nicht sein, scheinbar so nen indirekter Konstruktor oder ein satic member?
Meine Frage: Kann ich den String im Objekt definieren, aber die Instanz des Strings erst später erstellen?? (Bitte keine Pointer Lösungen )
Bitte helft mir.
Thnx
-
Das Initialisieren der Klassenelemente musst du im Konstruktor erledigen.
-
aber wie rufe ich den kostruktor dieses strings auf?
-
Nö, wenn du es im Konstruktor machst, wird der String zweimal konstruiert. Nutze stattdessen ne Initialisierungsliste:
class A { string str; public: A() : str("hi") {} };
-
WOW! Das is großartig! Danke
Könnt ihr mir bitte trotzdem noch schnell erklären, was
string str;
macht?
Sagt das dem Compiler: Definiere einen String, und wenn in der Initialisierungsliste kein Konstruktor angegeben wurde, dann rufe den Standardkonstruktor direkt bei der Konstruktion von A auf?
-
Genau das.
Aber schrei doch nicht immer so
-
Bin ja nur glücklich, das Prob hat mich jetzt schon nen paar Monate genervt...
Thnx & Greetz