Winner_Of_Death Temat założony przez niniejszego użytkownika |
[C++, SFML] Jedna zmienna we wszystkich plikach » 2014-11-15 21:27:26 Witam Chcę utworzyć zmienną typu sf::RenderWindow tak, żeby można było z niej korzystać w innych klasach, funkcjach itp. w różnych plikach. Wiem, że zmienne gloabalne to zło, lecz po co tworzyć zmienną w jednej klasie i potem przesyłać do innych klas, skoro i tak będę jej musiał używać prawie wszędzie ? Próbowałem wielu sposobów między innymi z friend, static i extern, najwidoczniej robię błędy. Pokażę na skromnym przykładzie z int'em zamiast sf::RenderWindow: #include "1.hpp"
int main() { return 0; }
#pragma once
extern int zmienna;
#include "2.hpp"
#pragma once
class klasa { public: void funkcja(); };
#include "2.hpp"
void funkcja() { zmienna = 10; }
|
|
1aam2am1 |
» 2014-11-15 21:45:18 Próbowałem kiedyś to zrobić ale wybiłem sobie to z głowy bo nawet gdy widziałem tą zmienną ze wszystkich plików w projekcie. To nadal po odwołaniu się do niej w każdym pliku przechowywała inną zmienną np:
plik1 odwołuje się do zmienna wyświetla 5456477 plik2 odwołuje się do zmienna wyświetla 5646546
Wyświetlało różne wartości tak jakby w programie były to dwie różne zmienne. |
|
Winner_Of_Death Temat założony przez niniejszego użytkownika |
» 2014-11-15 21:49:07 A jak sobie z tym poradziłeś? Zmarnowałem już naprawdę wiele dni, przeglądając dziesiątki wyników z googla i nadal nie wiem jak to zrobić ;/ Nie wyobrażam sobie robić większej aplikacji w SFML'u nie mając tej zmiennej. |
|
1aam2am1 |
» 2014-11-15 21:58:45 Stworzyłem plik.hpp W którym miałem zmienną statyczną i dołączyłem ją do wszystkich plików nagłówkowych. |
|
Winner_Of_Death Temat założony przez niniejszego użytkownika |
» 2014-11-15 22:07:35 Jakieś rozwiązanie, dzięki ;) Z całkowitą pewnością, wystarczy mi. Tylko nasuwa mi się pytanie, czy tworzenie tylu zmiennych w osobnym pliku w dużych projektach, nie obciążałoby procesora? |
|
1aam2am1 |
» 2014-11-15 22:12:43 Program jest kompilowany do exe, więc nie. Wszystkie zmienne są i tak przechowywane w pamięci ram.
A, to jest offtop jeżeli masz inne pytania stwórz osobne tematy, ale wcześniej zapytaj się wujka google. |
|
Winner_Of_Death Temat założony przez niniejszego użytkownika |
» 2014-11-15 22:54:14 No nie wiem czy to był offtop, za bardzo związane z tematem, według mnie. Aczkolwiek, sposób ze zmiennymi w innym pliku, raczej nie będzie się sprawował, chyba, że coś robię źle. Podam kod przykładowego programu: #include "zmienne.hpp" #include "1.hpp" int main() { klasa k; zmienna = 5; std::cout << zmienna << "\n" << & zmienna << "\n"; k.funkcja(); k.ustaw(); k.funkcja(); return 0; }
#pragma once #include <iostream> #include "zmienne.hpp" class klasa { public: void funkcja(); void ustaw(); };
#include "1.hpp" void klasa::ustaw() { zmienna = 10; }
void klasa::funkcja() { std::cout << zmienna << "\n" << & zmienna << std::endl; }
#pragma once
static int zmienna;
Nie rozumiem, skoro deklaruję tylko jedną zmienną jeden raz, czemu zmienna prosto z main'a ma inny adres, od tej użytej w klasie (Czyli tak jak pisałeś 2 posty wyżej)? Przykładowe wyjście programu: 5 0x474008 0 0x474014 10 0x474014
|
|
1aam2am1 |
» 2014-11-15 23:03:01 Też tego do końca nie rozumiem dlatego nie mogłem tego naprawić i dlatego w swoich programach muszę się bawić w przekazywanie klasy ze zmiennymi. Jak ktoś wie to niech powie lub powie jak to zrobić.
PS. Chyba nie pozostało ci nic innego jak przekazywanie klasy ze zmiennymi. |
|
« 1 » 2 |