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 constant

    Ist 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


Log in to reply