lukas_j pisze:Wlasnie tak mam! Dokladnie tka i nie dziala.
a po za tym w nagłówku nie definiuj zmiennych jedynie deklaruj bo ci się linker rzuci
Jednak teraz mam drugi plik, wpisalem w nim tez #include <global.h> tak jak w pierwszym i mam np. takie bledy:
No i dlaczego zaprzeczasz samemu sobie?? Jak już kolega wspomniał - NIE DEFINIUJ zmiennych w plikach NAGŁÓWKOWYCH. W plikach nagłówkowych TYLKO je DEKLARUJESZ....
Przykład:
Plik a.h:
Plik a.cpp:
Kod: Zaznacz cały
#include "a.h"
a1 = 0;
// część kodu pominięta
Plik b.cpp:
Kod: Zaznacz cały
#include "a.h"
a2 = 3;
// i tu już przy kompilacji tego pliku dostaniesz błąd...
A teraz poprawnie:
Plik a.h:
Plik a.cpp:
Kod: Zaznacz cały
#include "a.h"
int a1= 0; // Dopiero tu definiujesz zmienną!
Plik b.cpp:
Kod: Zaznacz cały
#include "a.h"
int a2 = 3; // Dopiero tu definiujesz zmienną!
PODSUMOWUJĄC:
Jeśli już musisz mieć zmienną globalną dostępną w kilku plikach, to
definiujesz ją tylko i wyłącznie w pliku z implementacją (.cpp). Zaś aby "poinformować" o tej zmiennej
inne jednostki kompilacji, to podajesz jej deklarację w pliku nagłówkowym ze słowem kluczowym
extern. Jednakże (jak zapewne większość osób mających doświadczenie w programowaniu powie ci), używanie zmiennych globalnych nie należy do zbyt poprawnych technik. Chociaż czasem zachodzi potrzeba użycia takowych. Ale wyobraź sobie taką sytuację: masz dwie zmienne globalne - jedną definiujesz w pliku a.cpp, a drugą w b.cpp:
Plik a.h:
Plik a.cpp:
Plik b.cpp:
I co teraz?? Jak nietrudno się domyślić, inicjalizacja nie przebiegnie prawidłowo, bo wartość jednej zmiennej jest przypisywana do innej i na odwrót. Problem w tym, że przypisanie może nastąpić, zanim jedna ze zmienych zostanie utworzona, tudzież zainicjalizowana.