enum : Nicht dem Standard entsprechende Erweiterung



  • Ich habe folgenden Code

    PhaseCalcType = enumPhaseCalcType::Fresnel;
    

    den ich verwende weil

    PhaseCalcType = Fresnel;
    

    auf folgende Struktur verweisen würde:

    enumSelectedBeam::Fresnel
    

    und damit einen Fehler produziert.

    die erste Lösung liefert mir die Warnung

    warning C4482: Nicht dem Standard entsprechende Erweiterung: Enumeration "enumPhaseCalcType" wird im qualifizierten Namen verwendet.

    Wie werde ich die wieder los?



  • Also das Problem hier ist Mehrdeutigkeit. Du verwendest den gleichen Bezeichner in verschiedenen enums. Du hast jetzt 2 Möglichkeiten:

    1. Du nennst einen der beiden anders.
    2. Du steckst die enums in ein eigenen namespace

    namespace phaseCalcType{
       enum enumPhaseCalcType{
           Fresnel
       };
    }
    
    using phaseCalcType::enumPhaseCalcType; // Macht das sichtbar im äußeren Namespace
    

    "enumPhaseCalcType::Fresnel" ist nicht im Standard beschrieben und daher warnt der Compiler, wenn ich mich aber richtig erinnere wird das im neuen Standard aber eingeführt. Das nützt momentan aber natürlich nicht wirklich etwas darauf solltest du noch darauf verzichten bis der neue Standard offiziell wird und die Mehrheit der Compiler dies auch unterstützt.

    Vinzenz



  • Im neuen Standard sollte mit enum class eine typsicherere Version der Enums kommen. Dann sind zum Beispiel implizite Konvertierungen zu integralen Typen nicht mehr möglich und der Scope der Enumeratoren muss spezifiziert werden.


Anmelden zum Antworten