Default Ctor



  • Hi,

    ich habe dieses Struct:

    struct SunAngle {
       float angle;
       Color color;
    };
    

    Aber wenn ich davon ein Objekt erzeugen will:
    SunAngle s;
    dann meckert der Compiler, dass es keinen Default Ctor gibt. Ich dachte der Compiler erzeugt immer einen Default Ctor? 😕



  • PS: In der struct steht "const Color color". Ist das const das Problem? 😕



  • Wie sieht denn der Typ "Color" aus?



  • Ctor?? schrieb:

    PS: In der struct steht "const Color color". Ist das const das Problem? 😕

    Ja. Du musst konstante Eigenschaften in der Initialisierungs-liste des Konstruktors initialisieren (wie der Name so schön sagt).

    Edit: Also so wäre es eine Möglichkeit:

    struct SunAngle 
    {
       float angle;
       Color const color;
    
       SunAngle():
       color(0, 0, 255) //Angenommen die Klasse Color hat einen RGB-Konstruktor
       { }
    };
    

    Oder gar gleich so (solange dir color vorerst egal ist):

    SunAngle():
       color()
       { }
    


  • So ganz versteh ich das Problem nicht. Color hat einen Default Ctor. Benutzt der vom Compiler generierte Default Ctor nicht die Initialisierungsliste? Wie sieht der denn dann aus? 😕



  • Ctor?? schrieb:

    So ganz versteh ich das Problem nicht. Color hat einen Default Ctor. Benutzt der vom Compiler generierte Default Ctor nicht die Initialisierungsliste? Wie sieht der denn dann aus? 😕

    Woher soll der Compiler wissen, mit welchem Wert du die Konstante initialisiern willst?



  • Gugelmoser schrieb:

    Woher soll der Compiler wissen, mit welchem Wert du die Konstante initialisiern willst?

    Woher weiss der Compiler denn, womit er nicht konstante Member initialiseren soll? Praktisch wäre das ohne weiteres möglich.



  • Tachyon schrieb:

    Praktisch wäre das ohne weiteres möglich.

    zum Leidwesen des Entwicklers.



  • Ich find's intuitiv, dass eine Konstant mit dem Standardwert initialisiert wird. Wobei man sich die Frage stellen sollte, welchen Wert (=Zweck) solch eine Konstante dann eigentlich hat.



  • Eisflamme schrieb:

    Wobei man sich die Frage stellen sollte, welchen Wert (=Zweck) solch eine Konstante dann eigentlich hat.

    Und dann sind wir wieder bei dem Punkt angelangt, wo eine Konstante einen vom Programmierer bestimmten Wert hat, und keinen Zufälligen. Denn die Konstante kann man, so schön der Name ja ist, nicht mehr verändern.


Anmelden zum Antworten