Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak zobaczyć zmienną funkcji x() z funkcji y(), które znajdują się w funkcji main(), ale każda jest w innym pliku i ma inny .h.

Ostatnio zmodyfikowano 2017-03-11 21:31
Autor Wiadomość
MDK
Temat założony przez niniejszego użytkownika
Jak zobaczyć zmienną funkcji x() z funkcji y(), które znajdują się w funkcji main(), ale każda jest w innym pliku i ma inny .h.
» 2017-03-11 19:31:33
Tak jak w temacie.
Przypuśćmy, że jest funkcja void x(){int zmienna}; i funkcja void y(){};. Każdą z tych funkcji wykorzystuję w funkcji main(), ale znajdują się w osobnych plikach .cpp i mają oczywiście osobne pliki .h. Czy mogę i jak pobrać zmienną z funkji void x() do void y.
C/C++
int main() {
    x() { cin >> zmienna };
    y();
    return 0;
}
P-158866
Bielan
» 2017-03-11 19:39:00

prog.cpp: In function ‘int main()’:
prog.cpp:2:7: error: ‘x’ was not declared in this scope
     x() { cin >> zmienna };
       ^
prog.cpp:3:7: error: ‘y’ was not declared in this scope
     y();
       ^

Ten fragment kodu miał coś robić? Ewentualnie przedstawiać jakaś ideę?

Przesyłanie zmiennych między funkcjami realizujemy przez zwracanie argumentów oraz odbieranie argumentów. Pierwsza funkcja musi zwracać jakieś dane a kolejna pobierać je w postaci argumentów.

Jeżeli funkcje operują na pewnym stanie to oznacza, że prawdopodobnie mamy do czynienia z obiektem i funkcje stają się metodami klasy pracującymi na stanie klasy.

» Kurs C++ » Poziom 2Funkcje - pierwsze starcie lekcja
» Kurs C++Funkcje kolejne aspekty lekcja
P-158869
MDK
Temat założony przez niniejszego użytkownika
» 2017-03-11 19:44:31
Tak, to miało obrazować ogólnie co chciałem zrobić. Kurs cpp z tej strony mam już przerobiony. Tylko właśnie natknąłem się na problem, który chciałbym jakoś ładnie rozwiązać. No, bo return może przesłać tylko jedną zmienną, czy też obiekt. A co, jeśli chciałbym przesłać dwie, lub więcej zmiennych i jednocześnie nie zaśmiecać tymi zmiennymi maina? Czy jest jakieś wyjście, oprócz zapisania tych zmiennych do pliku, a później ich wczytywania w kolejnej funkcji?
P-158871
maly7
» 2017-03-11 19:48:24
Możesz zapakować te zmienne w strukturę. Ale dlaczego chcesz dwie funkcje mieć w osobnych plikach jeśli korzystają z siebie nawzajem? Fajnie byłoby utworzyć klase, jeśli mają mieć wspólne zmienne i funcję mają z nich korzystać.
P-158872
MDK
Temat założony przez niniejszego użytkownika
» 2017-03-11 19:52:04
Zacząłem zabawę z SFMLem. I w jednym pliku chcę mieć klasę "player", a w drugim "enemy". I pewne zmienne tych klas muszą się "spotkać" w main np. przy sprawdzaniu kolizji.
P.S. Dodam, że miałem już to wszystko w samym main() i ładnie działało. Tylko teraz zacząłem rozbijać to na mniejsze pliki i w tym miejscu trochę utknąłem.

P.S.2 Ok, już nie ważne. Rozwiązałem problem. Chyba za długo siedzę dziś przed komputerem, hehe... wystarczyło się odwołać do zmiennej, jako do elementu klasy. Niewiarygodne ;P
P-158873
Bielan
» 2017-03-11 20:07:48
Brzmi jakby kod korzystał nawzajem ze zmiennych do których nie powinno być dostępu.

C/C++
class Player {
    // ...
    Rect GetBoundingRect();
}

class Enemy {
    // ...
    Rect GetBoundingRect();
}

class Colider {
    // ...
    bool Colide( const Player &, const Enemy & ); // koliduje Recty, zwraca wartość czy zaszła kolizja
}

Ewentualnie bardziej dzieląc kod:

C/C++
class PhysicalObject {
    // ...
}

class Player
    : PhysicalObject;
class Enemy
    : PhysicalObject;
class PhysicalEngine
{
    // ...
    bool Colide( const PhysicalObject &, const PhysicalObject & );
}

Ale to wyłącznie sugestie.
P-158876
MDK
Temat założony przez niniejszego użytkownika
» 2017-03-11 20:15:11
Z dziedziczeniem jest dobry pomysł. Będę to musiał sprawdzić. A przy okazji przećwiczę, bo jeszcze nie miałem okazji.
P-158878
mokrowski
» 2017-03-11 21:31:59
Oprócz struktur...
Przy zwracaniu pary danych (czyli 2 danych) z funkcji możesz posłużyć się std::pair z nagłówka <utility>. Jeśli masz tych danych więcej i kod intensywnie wykorzystuje , możesz użyć std::tuple z nagłówka <tuple> (od C++11).
P-158885
« 1 »
  Strona 1 z 1