2010-12-22 41 views
31

Viniendo de un trasfondo de C# de un curso nocturno en una universidad local, en cierto modo comencé mi camino en C++. Tener mucho dolor acostumbrándose a la sintaxis. También estoy muy verde cuando se trata de técnicas de codificación.¿Cómo uso el valor Enum de una clase en otra parte del código?

Desde mi función WinMain, deseo poder acceder a una variable que está utilizando una enumeración que declare en otra clase.

(inside core.h) 
class Core 
{ 
    public: 
    enum GAME_MODE 
    { 
     INIT, 
     MENUS, 
     GAMEPLAY 
    }; 
    GAME_MODE gameMode; 

    Core(); 
    ~Core(); 
    ...OtherFunctions(); 
}; 

(inside main.cpp) 
Core core; 
int WINAPI WinMain(...) 
{ 
    ... startup code here... 

    core.gameMode = Core.GAME_MODE.INIT; 

    ...etc... 
} 

Básicamente quiero establecer que el modo de juego al valor de enumeración de Init o algo por el estilo de mi función WinMain. También quiero poder leerlo de otras áreas.

consigo el error ...

expected primary-expression before '.' token 

si trato de usar core.gameMode = Core::GAME_MODE.INIT;, entonces me sale el mismo error.

No me preocupan las mejores prácticas, ya que estoy tratando de obtener la comprensión básica de pasar variables en C++ entre archivos. Me aseguraré de que las variables estén protegidas y cuidadosamente guardadas más adelante una vez que esté acostumbrado a la flexibilidad de la sintaxis.

Si no recuerdo mal, C# me permitió utilizar Enums de otras clases, y todo lo que tuve que hacer fue algo así como Core.ENUMNAME.ENUMVALUE.

Espero que lo que quiero hacer sea claro: \ Como no tengo idea de la terminología correcta.

Respuesta

40

Uso

core.gameMode = Core::INIT; 

Los valores individuales de una enumeración están en el ámbito no dentro de ese enumeración pero al mismo nivel que la propia enumeración. Esto es algo que la mayoría de otros idiomas (incluyendo C#) hacen de manera diferente, y C++ 0x permitirá a ambas variantes para que haya,

core.gameMode = Core::GAME_MODE::INIT; 

También será legal.

Además, las enumeraciones inflexible de tipos que se añadirán en C++ 0x (enum class) pondrán valora la enum solamente dentro del alcance de la enumeración (es decir, como en C#); esto resuelve el problema que anotó en su comentario de que para las enumeraciones "normales", los identificadores para los valores enum deben ser únicos en todas las enumeraciones definidas en el mismo ámbito.

+0

¡Dulce que funcionó! Gracias por eso :) Ahora puedo ver que hay tantos temas sobre Enums que necesitan tener nombres diferentes si están en el mismo espacio de nombres – ChiggenWingz

+0

@ChiggenWingz: Buena observación: las enumeraciones fuertemente tipadas de C++ 0x ayudarán en a este respecto (y he actualizado la respuesta para discutir esto). –

Cuestiones relacionadas