• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Enum - C++ Visual studio nie widzi wartości.

VPS Starter Arubacloud
0 głosów
333 wizyt
pytanie zadane 28 lutego 2016 w C i C++ przez Caspariano Użytkownik (760 p.)
zamknięte 28 lutego 2016 przez Caspariano

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 ==========


 

komentarz zamknięcia: Problem rozwiązany

2 odpowiedzi

+1 głos
odpowiedź 28 lutego 2016 przez adrian17 Ekspert (349,820 p.)
wybrane 4 marca 2016 przez Caspariano
 
Najlepsza

Zadeklarowałeś enum w klasie, to ma swoje konsekwencje - jest widoczny tylko poprzez tą klasę.

case GameSettings::EASY:

 

komentarz 28 lutego 2016 przez Caspariano Użytkownik (760 p.)
Dzięki wielkie :)
+1 głos
odpowiedź 28 lutego 2016 przez MetGang Nałogowiec (34,360 p.)

Mała nauka o czymś takim co po angielsku ładnie nazywa się scope, a po polsku już mniej ładnie - zasięg. Otóż enum znajdujący się w jakiejś klasie, jest także w jej przestrzeni nazw.

class MyClass
{
public:
    enum MyEnum { MyValue };
}

case MyClass::MyValue: // poprawne odwołanie
case MyValue: // błędne odwołanie

Na podstawie tego powinieneś znaleźć błąd.

Podobne pytania

0 głosów
2 odpowiedzi 821 wizyt
pytanie zadane 28 grudnia 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 680 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
2 odpowiedzi 2,192 wizyt

93,018 zapytań

141,984 odpowiedzi

321,282 komentarzy

62,364 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...