Zdravím, v C/C++ jsem začátečník a potřeboval bych pomoct s pochopením globálních proměnných. Na netu je hromada příkladů a z nich mi přijde že to chápu, ale ve svém programu vidím, že nechápu :)
Zjednodušený příklad:
Mám jeden hlavičkový soubor (např. main.h) a pak soubor main.cpp, foo.cpp (k němu foo.h) a bar.cpp (k němu bar.h). Chci mít globální proměnnou glob, která bude přístupná ve všech třech .cpp souborech.
Hlavičkový soubor main.h includuji do všech .cpp souborů (ať už přímo nebo nepřímo). Takže právě sem bych umístil hlavní deklaraci:
int glob;
Pak chci třeba v main.cpp ve funkci main() přiřadit hodnotu:
#include "main.h"
extern int glob;
void main() {
glob = 21;
...
// Pouzivani trid foo() a bar()
...
return 0;
}
Už tady je problém - v takovémto případě mi to vyhodí třeba 5x multiple definition of glob.
A ve třídách foo() a bar() chci k proměnné taky přistupovat. Zkoušel jsem dávat:
extern int glob;
jak do hlavičkových souborů foo.h a bar.h, tak do foo.cpp a bar.cpp NAD definice tříd foo() a bar().
Zkoušel jsem toho moc, ale i když se mi to nějak podařilo, tak mi to nedávalo smysl => potřebuji pochopit jak to funguje / jak to správně deklarovat, inicializovat a používat.
Nějaký dobrák co by mě to trošku vysvětlil? Na netu v příkladech většinou ukazují sdílení proměnné z jednoho souboru do druhého a to není úplně ono. Já potřebuji jednu globální definici a používat tu proměnnou v libovolném počtu souborů. V jedno jí třeba nastavím hodnotu a ostatní ji jen čtou - nebo třeba i mění - to už je jedno.