Witam.
Piszę sobie snake'a w Visual Studio 2015, przy użyciu biblioteki SFML, no i natrafiłem na mały problem z typem wyliczeniowym.
1.Posiadam Klasę GameSettings:
class GameSettings
{
public:
GameSettings();
~GameSettings();
bool walls;
enum DifficultLevel { EASY,NORMAL,HARD };
DifficultLevel difficultLevel;
void load_settings();
};
2.Posiadam klasę Game. Jednym z jej atrybutów jest właśnie przedstawiciel klasy GameSettings
3.Klasa Game posiada funkcję która jest odpowiedzialna za wyświetlanie okna z wyborem ustawień
void options().
class Game
{
public:
Game();
~Game();
enum GameState { MENU,GAME,OPTIONS,HIGHSCORES,END };
GameState state;
GameSettings gameSettigns;
void runGame();
private:
Font font;
Sound menu_button;
SoundBuffer buffer;
void menu();
void options();
};
4.Nie mogę z poziomu tej procedury zmienić wartości gameSettings, gdyż kompliator wyrzuca błąd.
if (actuall_settings[1].getGlobalBounds().contains(mouse) &&
event.type == Event::MouseButtonReleased &&
event.key.code == Mouse::Left)
{
switch (gameSettigns.difficultLevel)
{
case EASY: gameSettigns.difficultLevel = NORMAL; actuall_settings[1].setString("Normal"); menu_button.play(); break;
case NORMAL: gameSettigns.difficultLevel = HARD; actuall_settings[1].setString("Hard"); menu_button.play(); break;
case HARD: gameSettigns.difficultLevel = EASY; actuall_settings[1].setString("Easy"); menu_button.play(); break;
}
}
Teraz tak, kiedy piszę "gameSettings" wystarczy że napiszę początek i program podpowiada mi resztę, po operatorze wyłuskania Visual również wyświetla mi i pozwala wybrać bez wpisywania "difficultLevel" lecz kiedy chcę zmienić już wartość to nie rozpoznaje jej.
1>------ Build started: Project: Snake, Configuration: Debug Win32 ------
1> Game.cpp
1>d:\c++\sfml projects\snake\snake\game.cpp(257): error C2065: 'EASY': undeclared identifier
1>d:\c++\sfml projects\snake\snake\game.cpp(257): error C2131: expression did not evaluate to a constant
1> d:\c++\sfml projects\snake\snake\game.cpp(257): note: failure was caused by non-constant arguments or reference to a non-constant symbol
1> d:\c++\sfml projects\snake\snake\game.cpp(257): note: see usage of 'EASY'
1>d:\c++\sfml projects\snake\snake\game.cpp(257): error C2065: 'NORMAL': undeclared identifier
1>d:\c++\sfml projects\snake\snake\game.cpp(258): error C2065: 'NORMAL': undeclared identifier
1>d:\c++\sfml projects\snake\snake\game.cpp(258): error C2131: expression did not evaluate to a constant
1> d:\c++\sfml projects\snake\snake\game.cpp(258): note: failure was caused by non-constant arguments or reference to a non-constant symbol
1> d:\c++\sfml projects\snake\snake\game.cpp(258): note: see usage of 'NORMAL'
1>d:\c++\sfml projects\snake\snake\game.cpp(258): error C2065: 'HARD': undeclared identifier
1>d:\c++\sfml projects\snake\snake\game.cpp(259): error C2065: 'HARD': undeclared identifier
1>d:\c++\sfml projects\snake\snake\game.cpp(259): error C2131: expression did not evaluate to a constant
1> d:\c++\sfml projects\snake\snake\game.cpp(259): note: failure was caused by non-constant arguments or reference to a non-constant symbol
1> d:\c++\sfml projects\snake\snake\game.cpp(259): note: see usage of 'HARD'
1>d:\c++\sfml projects\snake\snake\game.cpp(259): error C2065: 'EASY': undeclared identifier
1>d:\c++\sfml projects\snake\snake\game.cpp(257): error C2051: case expression not constant
1>d:\c++\sfml projects\snake\snake\game.cpp(258): error C2051: case expression not constant
1>d:\c++\sfml projects\snake\snake\game.cpp(259): error C2051: case expression not constant
1>d:\c++\sfml projects\snake\snake\game.cpp(260): warning C4060: switch statement contains no 'case' or 'default' labels
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========