Skocz do zawartości

Zwracanie Funkcji


ravh

Rekomendowane odpowiedzi

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

  • Filar Społeczności

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

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

  • 2 tygodnie później...
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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...