Seltsames Verhalten mit enum und Konstruktor



  • Hey!

    Sitze grad in einem C++ Kurs und da stießen wir auf etwas, wo selbst der Trainer nicht weiter wusste:

    #include <iostream>
    using namespace std;
    
    enum Color
    {
    	Red, Green, Blue
    };
    
    class Test
    {
    public:
    	Test()
    	{
    		cout << "Test default" << endl;
    	}
    	Test(Color color)
    	{
    		cout << "Test with color" << endl;
    	}
    };
    
    int main()
    {
    	// VC++ 2008
    	Test(Green); // Bezeichner Green ist "enum Color::Green = 1"
        // Es wird aber der Default-Konstruktor aufgerufen!
    
    	Green; // Bezeichner ist nun plötzlich "Base Green"
    }
    

    Es wird der Default-Konstruktor aufgerufen, aber warum?
    Wenn ich...

    Test((Color)2);
    

    ...schreibe, dann wird der richtige Konstruktor aufgerufen. Was soll das?

    Hatte mit sowas nie zu tun, unser Trainer anscheinend auch nicht 🙄
    MfG



  • Du legst eine Variable Green vom Typ Test an:

    Test(Green);
    //ist sowas wie:
    int(a);
    a = 3;
    

    Was Du willst:

    Test obj(Green);
    


  • muss ja ein toller trainer sein 🙄



  • Ohhh alles klar 🙂
    Hatte die Schreibweise mit den Klammern bei einer Definition nicht mehr in Erinnerung, ist doch irgendwo auch doof 🙄

    Funktioniert dann wohl nur zB. so (Da der Compiler hier ja nun weiß, dass er eine Definition nicht irgendwohin zuweisen kann):

    Test t = Test(Green);
    

    MfG

    //EDIT:
    @besserer
    Tja, man lernt nie aus. Außerdem kommt der eher von der C# Ecke 👎

    @LordJaxom
    Nene nix, wollts nur gesagt haben.



  • Was spricht gegen Test t(Green)?



  • Hi,

    ich vermute ja mal einen Copy-Fehler, aber ich vermisse in der Deklaration von "Test" ein Attribut vom Typ "Color"....

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Hi,

    ich vermute ja mal einen Copy-Fehler, aber ich vermisse in der Deklaration von "Test" ein Attribut vom Typ "Color"....

    Gruß,

    Simon2.

    Wieso, wenns nur um den Konstruktoraufruf geht?



  • Jo, war jetzt nur schnell für ne Demo.



  • Tachyon schrieb:

    Simon2 schrieb:

    Hi,

    ich vermute ja mal einen Copy-Fehler, aber ich vermisse in der Deklaration von "Test" ein Attribut vom Typ "Color"....

    Gruß,

    Simon2.

    Wieso, wenns nur um den Konstruktoraufruf geht?

    .... ich frag ja nur. Wenn jemand hier mit seltsamer Syntax von einem noch seltsameren Trainer auftaucht, frage ich lieber einmal mehr (zumal auf sein ursprüngliches Problem ja gelöst ist).
    Bei Unregs kann ich nie wissen, wie ihr Wissensstand so ist ...

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Tachyon schrieb:

    Simon2 schrieb:

    Hi,

    ich vermute ja mal einen Copy-Fehler, aber ich vermisse in der Deklaration von "Test" ein Attribut vom Typ "Color"....

    Gruß,

    Simon2.

    Wieso, wenns nur um den Konstruktoraufruf geht?

    .... ich frag ja nur. Wenn jemand hier mit seltsamer Syntax von einem noch seltsameren Trainer auftaucht, frage ich lieber einmal mehr (zumal auf sein ursprüngliches Problem ja gelöst ist).
    Bei Unregs kann ich nie wissen, wie ihr Wissensstand so ist ...

    Gruß,

    Simon2.

    Okay...

    Wobei er (wider seinem Namen) schon registriert ist. 😉



  • Tachyon schrieb:

    ...Wobei er (wider seinem Namen) schon registriert ist.
    😉

    Huch ! 😮
    Habe ich übersehen...

    Gruß,

    Simon2.



  • 🙂

    Simon2 schrieb:

    ...mit seltsamer Syntax von einem noch seltsameren Trainer...

    Naja, er wollte nur einen Konstruktoraufruf demonstrieren.
    Ein Trainer weiß auch nicht alles.
    Mal ehrlich, wer definiert schon so... mit Klammern, ist doch altmodisch 🤡

    MfG


Log in to reply