Aufruf des Default-Konstruktors ohne ()?



  • Hallo!

    Ich habe in einer Klasse einen default- (sowie einen parametrierten Konstruktor - ist aber irrelevant, der funktioniert) implementiert.

    Vec4::Vec4()
    {
      _coords[0] = 1;
      _coords[1] = 0;
      _coords[2] = 0;
      _coords[3] = 0;
    }
    

    Nun habe ich den intuitiv wie folgt aufgerufen:

    Vec4 a();
    

    Funktioniert allerdings nicht, die 4 Membervariablen der Klasse bleiben uninitialisiert. Bei Aufruf ohne () funktionierts.

    Warum ist das so, und was passiert statt des Konstruktoraufrufs bei ()?

    Danke!

    Grüße
    Matthias



  • Das ist ein häufig gemachter Fehler.

    Mit

    vec a();
    

    deklarierst du in C++ eine Funktion mit Namen a, die ein vec-Objekt zurückgibt. Ohne die Klammern rufst du den Standardkonstruktor auf, wie du ja bereits selbst erkannt hast.



  • oder du schreibst

    vec a = vec();
    

    Was aber keinen Sinn macht (und noch assignment oder copy-konstruktor voraussetzt) 😃



  • Vielen Dank.
    Stimmt, ist ja auch logisch. Brett vorm Kopf.


Anmelden zum Antworten