titel



  • nachrichtentext


  • Mod

    feld[1] = new Dekoartikel("id1", 0.99, "vase", Dekoartikel::rot);
    

    Dafür muss die Aufzählung aber public sein.

    Außerdem ist

    ínt main(voíd){
    

    falsch.



  • Der Fehler ist hier:

    feld[1] = new Dekoartikel("id1", 0.99, "vase", rot);
    

    Du hast das enum in der Klasse als protected (ich würde wenn schon lieber private nehmen) definiert, von außen hast du darauf logischerweise keinen Zugriff, woher soll der Compiler dann "rot" kennen? Entweder du definierst das enum global (unsauber) oder aber du definierst es als Public.

    class Dekoartikel : public Wohnzubehoer {
        public:
            enum farben{rot, gruen, blau};
            Dekoartikel(char*, float, string, farben);
            virtual void drucke(ostream& os) const;
        private:
            farben color;
    }; 
    
    Dekoartikel::Dekoartikel(char* Id, float Preis, string Bez, farben Color) : Wohnzubehoer(Id, Preis, Bez)
    {
        color = Color;
    } 
    
    int main(void){
    // ............................... .. . .. .
        feld[1] = new Dekoartikel("id1", 0.99, "vase", Dekoartikel::rot);
    // ... .. .. .
    return 0;
    


  • Ad aCTa schrieb:

    Entweder du definierst das enum global (unsauber) oder aber du definierst es als Public.

    Erklär mir bitte mal, was an einem globalen enum unsauberer ist, als an einem public deklarierten.



  • Global donnert dir den Namensraum zu und ist nicht im Sinne der OOP.
    Ich sprach außerdem davon, das enum zu definieren, nicht irgendein Objekt zu deklarieren. Ein spezielles Enum-Objekt ist natürlich private.
    Was ist an public-Definitionen von enums in Klassen bitte unsauber? Bei Klassen in Klassen ist das gang und gebe, z.B. ein Exception-Typ. Stroustrup persönlich macht sowas ("Die C++ Programmiersprache": S. 38)



  • nachrichtentext



  • Was auch nützlich sein kann, sind kleine Namensräume für Enumerationen, um die Eigenschaft besser zu klassifizieren:

    namespace Color
    {
        enum Type
        {
            Red,
            Grey,
            Teal,
        };
    }
    

    Ich finde es zum Teil sinnvoller, sowas zu schreiben (besonders, wenn das enum in mehreren Klassen benötigt wird):

    MyClass a(54, Color::Red);
    

    als sowas:

    MyClass a(54, MyClass::Red);
    

Anmelden zum Antworten