Newsgroup: it.comp.programmare.win32
Titolo: Variabili Globali

Scusate l'ignoranza, vorrei utilizzare un puntatore statico globale.
Ho creato un Globale.h con la mia variabile statica, ed ho incluso questo
header nel stdfx che visual studio crea per velocizzare la compilazione...
La variabile è visibile in ogni classe del mio progetto, però è come se
ogni classe vedesse una propria variabile. 
Per ora ho eliminato questo riferimento nella stdfx, ed ho aggiunto la
Globale.h nel file main.cpp. Inserendo la clausola extern ... in tutti gli
altri file.cpp facendo cosi funziona.
Esiste un modo migliore per fare questa cosa ? potreste darmi qualche
chiarimento.
Grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 chiarimento.
secondo me in Globale.h devi mettere "extern ..."; invece, in *un solo* 
file .cpp (lo puoi anche chiamare "Globale.cpp") devi mettere la 
definizione della variabile globale (senza extern).
...oppure, puoi introdurre delle funzioni per accedere alla variabile 
globale (ma forse e' piu' macchinoso...?)
--------------- globale.h -------------
#ifndef GLOBALE_H
#define GLOBALE_H
// Supponendo che la variabile sia un int
int getMiaGlobale();
void setMiaGlobale( int nuovoValore );
#endif // GLOBALE_H
--------------- globale.h -------------
------------- globale.cpp -------------
#include "globale.h"
static int miaVariabile;
int getMiaGlobale() {
  return miaVariabile;
}
void setMiaGlobale(int nuovoValore) {
  miaVariabile=nuovoValore;
}
--------------- globale.cpp ------------
bye
dan

Si ho tentato la strada delle funzioni č funziona. scusa il gioco di
parole.
Pero cercavo una soluzione piů comoda quindi ho incluso le variabili
globali in un solo modulo cpp e da tutti gli altri file cpp ho inserito
extern cosi il linker linka č funziona. pero sono perplesso pensavo che
inserendo il mio header in tutti i file tutti si riferissero alla stessa
istanza della variabile statica, cosa che non avviene.
Saluti.


Ho creato un Globale.h con la mia variabile statica, 
Elimini la parola chiave static e risolvi il problema.

Ho creato un Globale.h con la mia variabile statica, 
Elimini la parola chiave static e risolvi il problema.
Naturalmente devi definirla almeno in un file .
Esempio :
nel file GlobalVar.h da includere in tutti i file .cpp scrivi cosi :
#ifdef DEFVAR 
int MyVar ;
#else 
extern int MyVar ;
#endif
Nel file principale del progetto (ad esempio ,main.cpp)  scrivi cosi :
#define DefVar
#include "GlobalVar.h"

Si avevo gia pensato di includere un po di macro per automatizzare la
cosa, grazzie.
Rilancio la domanda Perchè lo static gli da fastidio ?
L'utilizzo di extern è il modo migliore o è l'unico modo per fare questa
cosa ?
saluti.


 Rilancio la domanda Perchč lo static gli da fastidio ?
Perchč se dichiari una variabile static, quella
variabile diventa automaticamente invisibile
fuori dal modulo in cui č definita.
Comunque, per me la cosa migliore sarebbe creare
una classicina apposta per gestire questa variabile,
usando metodi inline per accedere ad essa non hai
nemmeno l'overhead delle chiamate a funzione.
In questo modo puoi anche controllare meglio chi
la modifica e dove... mi pare piů sicuro.

Nelle ottimizzazioni c'č l'opzione compila tutto inline dovro fare delle
prove in merito, nel mio caso non ho problemi di accesso č creare funzioni
di accesso mi scoccia vado meglio a tenerla cosi globale č visibile a tutti
il mio problema nasce proprio per evitare di dover passare atraverso un
metodo per utilizzare questa cosa.
Saluti.
