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. int main() { x() { cin >> zmienna }; y(); return 0; }
|
|
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. Funkcje - pierwsze starcieFunkcje kolejne aspekty |
|
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? |
|
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ć. |
|
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 |
|
Bielan |
» 2017-03-11 20:07:48 Brzmi jakby kod korzystał nawzajem ze zmiennych do których nie powinno być dostępu. class Player { Rect GetBoundingRect(); }
class Enemy { Rect GetBoundingRect(); }
class Colider { bool Colide( const Player &, const Enemy & ); }
Ewentualnie bardziej dzieląc kod: class PhysicalObject { }
class Player : PhysicalObject; class Enemy : PhysicalObject; class PhysicalEngine { bool Colide( const PhysicalObject &, const PhysicalObject & ); }
Ale to wyłącznie sugestie. |
|
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. |
|
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). |
|
« 1 » |