Zmienne globalne & extern?? Nie czaję

0

Witam. Mam problem. W jaki sposób zadeklarować zmienne żeby jej wartość była dostępna we wszystkich klasach umieszczonych w różnych plikach. Dane zmiennych chciałbym edytować, kurcze i nie mogę zaczaić jak to zrobić.

0

W programowaniu obiektowym z reguly unika sie zmiennych globalnych. Sprobuj przeanalizowac swoj projekt i zmienic go tak, by ich uzycie nie bylo potrzebne.

0

Jeśli w pierwszym pliku .cpp zadeklarujesz zmienną:

int a = 5;

To jest ona niewidoczna w drugim pliku. Aby była widoczna w drugim pliku piszesz tak:

extern int a;

Gdybyś napisał tylko:

int a;

To w momencie linkowania program by się wykrzaczył bo nastąpiłaby tu redefinicja zmiennej a. Słówko extern oznacza dla kompilatory tyle co: "Piszę tutaj deklarację (nie definicję) zmiennej 'a' ale została ona zadeklarowana (i być może zdefiniowana) w innym pliku. Otrzymasz definicję (deklarację) tej zmiennej w momencie linkowania".
Mam nadzieję, że teraz jest wszystko jasne.

EDIT:
Właśnie tak jak napisał poprzednik unikaj tego typu zapisu. Pamiętam moje początki z programowanie... ze zmiennymi globalnymi jest tyle zachodu, że szkoda się tym zajmować. Najlepiej zbierz wszystkie zmienne globalne w jakiś logiczny obiekt. Jeśli są to np. jakieś parametry programu możesz stworzyć sobie klasę Parametry. Może to być tzw. Singleton. Poczytaj trochę o tym.

0

To ja też wtrącę...
Jaka jest w tym przypadku różnica jeżeli zamiast extern napiszę static??

0

że static nie da się "wyciągnąć" z pliku *.c(pp/xx).

0

Nie rozumiem co znaczy "wyciągnąć".
Kiedyś działały mi static i extern i użyłem extern choć właściwie nie wiem dlaczego :-)
Kiedy używać extern a kiedy static?

0

Static w zasięgu globalnym nie robi nic poza przypisaniem jej wartości zerowej zaraz po uruchomieniu programu. Gdyby nie była static i nie została zainicjalizowana to mogłyby się tam znaleźć jakieś śmieci z pamięci. Słowo static nie ma żadnego związku z widocznością zmiennych w innym pliku.
Tak w ogóle to trochę sobie poczytaj, odpowiedzi na wszystkie swoje pytania znajdziesz w każdej książce o podstawach c++.

0

http://4programmers.net/C/Static dział "Inne zastosowania".

0

a jeśli ma być ciut bardziej obiektowo

plik nagłówkowy (*.h):

class KlasaStatyczna //singleton
{
public:
 static int a; //zmienne singletonu
};

A w jednym z plików *.cpp

int KlasaStatyczna::a = 0; //fizyczne miejsce zmiennej z singletonu

i teraz w każdym *.cpp w którym widzisz KlasaStatyczna (dołączysz tam deklarację z pliku *.h) masz dostęp do tej zmiennej

i zmiennej używa się takiej zmiennej (metody też tak można robić) w ten sposób:

KlasaStatyczna::a = 666;

Zwykle w każdej aplikacji jest przynajmniej z jeden główny singleton, ja robię to w ten sposób, najprościej i najwygodniej

0

@_crayze to nie jest singleton!!! To jest jedynie statyczna zmienna, która jest identyczna dla wszystkich obiektów i jej zmiana w 1 z nich powoduje zmianę we wszystkich obiektach tej klasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1