ravh Opublikowano 23 Marca 2007 Udostępnij Opublikowano 23 Marca 2007 Witam, Może jest ktoś, kto ukończył MegaTutorial... Mianowicie, nie mogę zrozumieć pewnego przykładu z rozdziału "1.5 Złożone zmienne", podrozdział typy wyliczeniowe. Chcę przerobić przykład który jest PRZED zastosowaniem typów wyliczeniowych: const int KIERUNEK_GORA = 1; const int KIERUNEK_DOL = 2; const int KIERUNEK_LEWO = 3; const int KIERUNEK_PRAWO = 4; int nKierunek; nKierunek = PobierzWybranyPrzezGraczaKierunek(); switch (nKierunek) { case KIERUNEK_GORA: // porusz graczem w górę case KIERUNEK_DOL: // porusz graczem w dół case KIERUNEK_LEWO: // porusz graczem w lewo case KIERUNEK_PRAWO: // porusz graczem w prawo default: // a to co za kierunek? :) } Niewiem gdzie ma być i jak ma wyglądać funkcja: PobierzWybranyPrzezGraczaKierunek(); Ja próbuje różnych sposobów ale zawsze zwraca mi jakieś błędy. np: #include <iostream> #include <conio.h> int PobierzWybranyPrzezGraczaKierunek(); const int KIERUNEK_GORA = 1; const int KIERUNEK_DOL = 2; const int KIERUNEK_PRAWO = 3; const int KIERUNEK_LEWO = 4; void main() { int nKierunek; nKierunek = PobierzWybranyPrzezGraczaKierunek(); switch (nKierunek) { case KIERUNEK_GORA: std::cout << "gracz idzie do gory"; break; case KIERUNEK_DOL: std::cout << "gracz idzie w dol"; break; case KIERUNEK_PRAWO: std::cout << "gracz idzie w prawo"; break; case KIERUNEK_LEWO: std::cout <<"gracz idzie w lewo"; break; default: std::cout << "Nieznana opcja!"; } getch(); } Jeżeli ktoś wie gdzie i w jaki sposób ta funkcja powinna być zadeklarowana, to proszę o pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 23 Marca 2007 Filar Społeczności Udostępnij Opublikowano 23 Marca 2007 Funkcja powinna być zadeklarowana przed jej pierwszym użyciem. Takie są niestety uroki C++. :] Albo chociaż trzeba umieścić jej sygnaturę na samym początku, a ciało funkcji wtedy możesz zadeklarować gdzieś później. Zresztą po to jest include, żebyś z niego korzystał. Stwórz dodatkowy plik z deklaracją funkcji i następnie go "zainkluduj". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ravh Opublikowano 23 Marca 2007 Autor Udostępnij Opublikowano 23 Marca 2007 Niewiem czy cię dobrze zrozumiałem, bo przecież funkcja jest już zadeklarowana na początku int PobierzWybranyPrzezGraczaKierunek(); A co do tworzenia dodatkowych plików a następnie "includowanie" ich, to do tego jeszcze nie doszedłem. Wolałbym to zrobić w "konwencjonalny" sposób. EDIT: Problem niestety nadal nie jest rozwiązany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Vardi Opublikowano 4 Kwietnia 2007 Udostępnij Opublikowano 4 Kwietnia 2007 Niewiem czy cię dobrze zrozumiałem, bo przecież funkcja jest już zadeklarowana na początku int PobierzWybranyPrzezGraczaKierunek(); A co do tworzenia dodatkowych plików a następnie "includowanie" ich, to do tego jeszcze nie doszedłem. Wolałbym to zrobić w "konwencjonalny" sposób. EDIT: Problem niestety nadal nie jest rozwiązany. Funkcja na początku nie jest zadeklarowana tylko zdefiniowana. Możesz ją tam odrazu zadeklarować i będzie ok chyba, że wolisz ją zadeklarować na początku funkcji main. Default: (to jest kierunek domyślny, jeśli gracz nie wybierze kierunku to "włącza się" ten domyślny). Oto moja przeróbka przykładu: #include <iostream> #include <conio.h> using namespace std; const int KIERUNEK_GORA = 1; const int KIERUNEK_DOL = 2; const int KIERUNEK_LEWO = 3; const int KIERUNEK_PRAWO = 4; int PobierzWybranyPrzezGraczaKierunek() { int kierunek; cin >> kierunek; return kierunek; } int main() { int nKierunek = PobierzWybranyPrzezGraczaKierunek(); switch(nKierunek) { case KIERUNEK_GORA: cout << "gracz idzie do gory"; break; case KIERUNEK_DOL: cout << "gracz idzie w dol"; break; case KIERUNEK_LEWO: cout << "gracz idzie w lewo"; break; case KIERUNEK_PRAWO: cout << "gracz idzie w prawo"; break; default: cout << "nie wybrany kierunek"; break; } getch(); return 0; } Działa w 100% Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ravh Opublikowano 6 Kwietnia 2007 Autor Udostępnij Opublikowano 6 Kwietnia 2007 Dzięki Vardi za odpowiedź, sory że się narzucam, ale czy z rozpędu nie wiesz jak to samo zrobić za pomocą typu wyliczeniowego enum? Ja próbowałem w ten sposob: #include <iostream> #include <conio.h> using namespace std; enum DIRECTION { DIR_UP = 1, DIR_DOWN = 2, DIR_LEFT = 3, DIR_RIGHT = 4 }; int PobierzWybranyPrzezGraczaKierunek() { int Kierunek; cin >> Kierunek; return Kierunek; } int main() { DIRECTION Kierunek = PobierzWybranyPrzezGraczaKierunek(); switch(Kierunek) { case DIR_UP: cout << "gracz idzie do gory"; break; case DIR_DOWN: cout << "gracz idzie w dol"; break; case DIR_LEFT: cout << "gracz idzie w lewo"; break; case DIR_RIGHT: cout << "gracz idzie w prawo"; break; default: cout << "nie wybrany kierunek"; break; } getch(); } ale wyrzuca mi błąd: error C2440: 'initializing' : cannot convert from 'int' to 'DIRECTION' Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Vardi Opublikowano 6 Kwietnia 2007 Udostępnij Opublikowano 6 Kwietnia 2007 Musisz użyc rzutowania. #include <iostream> #include <conio.h> using namespace std; enum DIRECTION { DIR_UP = 1, DIR_DOWN = 2, DIR_LEFT = 3, DIR_RIGHT = 4 }; int PobierzWybranyPrzezGraczaKierunek() { int Kierunek; cin >> Kierunek; return Kierunek; } int main() { DIRECTION Kierunek2 = static_cast<DIRECTION>(PobierzWybranyPrzezGraczaKierunek()); switch(Kierunek2) { case DIR_UP: cout << "gracz idzie do gory"; break; case DIR_DOWN: cout << "gracz idzie w dol"; break; case DIR_LEFT: cout << "gracz idzie w lewo"; break; case DIR_RIGHT: cout << "gracz idzie w prawo"; break; default: cout << "nie wybrany kierunek"; break; } getch(); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ravh Opublikowano 6 Kwietnia 2007 Autor Udostępnij Opublikowano 6 Kwietnia 2007 Wielkie dzięki Vardi za odpowiedzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się