this im Konstruktor



  • Hallo,

    wenn ich den this-Pointer in einem Konstrtruktor verwende, bekomme ich folgende Fehlermeldung:

    warning C4355: this' : wird in Initialisierungslisten fuer Basisklasse verwendet

    Was ist so schlimm daran, wenn ich den dort verwende?

    Noch eine Frage: Ist es möglich, eine Funktion genauso zu benennen, wie das Objekt? Beispiel:

    Klasse Klasse(); //ohne parameter
    

    Sonst müsste ich dort so ein blödes "get" davorsetzen.

    Danke schonmal.



  • IM Konstruktor darfste schon this verwenden. Braucht man sogar recht oft.
    Zu der Frage mit der Funktion: Ja



  • Man darf den this-Zeiger im Konstruktor in einer Membervariable speicher.

    Aber nicht benutzen.

    Visual C++ meckert auch wenn man den einfach nur abspeichert. 😞



  • interpreter schrieb:

    Zu der Frage mit der Funktion: Ja

    Jein. Eine Memberfunktion kann nicht so heißen wie die Klasse (Ausnahme sind natürlich die Ctoren). Wenn du eine freie Funktion so nennst wie eine Klasse kommst du in das wunderschöne "Ach-Du-Scheiße-Ich-dachte-C++-hat-keine-Tag-Names-Aber-Warum-Verhält-Sich-mein-Code-dann-so"-Land. Ein Land in dem hauptsächlich Verwirrung regiert.

    Um das Problem mal an einem Beispiel zu verdeutlichen:

    // Führt einen neuen Typ namens Foo ein.
    // Im Gegensatz zu C sind wir in C++ gewohnt, dass wir diesen
    // neuen Typ Foo unqualifiziert benutzen können (also einfach Foo f). 
    class Foo 
    {};
    Foo f;    // ok. Globales Objekt f vom Typ Foo
    
    // Deklaration einer Funktion Foo
    // Mögen Ärger und Leid von nun an regieren
    // Von nun an ist Foo nicht mehr der Typ sondern die Funktion
    Foo Foo();
    
    int main()
    {
        Foo f;         // Ups! Kein Objekt f vom Typ Foo sondern ein ERROR!
        class Foo f1;  // ok
    }
    

    Verhindern kann man das Ganze in dem man ein typedef verwendet:

    typedef class Foo Foo;
    class Foo
    {};
    

    In diesem Fall kann man aber *keine* Funktion mehr mit dem Namen Foo erzeugen, da der Name Foo in diesem Scope bereits deklariert ist.



  • HumeSikkins schrieb:

    interpreter schrieb:

    Zu der Frage mit der Funktion: Ja

    Jein.

    Er wollte aber nur wissen, ob es möglichst ist und das ist klar mit "Ja" zu beantworten. :p

    Dass es Probleme nach sich zieht ist klar...



  • Ich finde es sehr gut, dass HumeSikkins auf diese Problematik hinweist. Denn diese Zusammenhänge sind nur wenigen klar! (wird in vielen Büchern nicht angesprochen)


Log in to reply