PDA

Visualizza la versione completa : [C++] dichiarazione variabili "pubbliche"


AleX ZeTa
09-06-2004, 22:15
ho un programma composto da 3 sorgenti:

main.cpp
cfr.h
cfr.cpp

cfr è una classe (in particolare una qWidget, ma è irrilevante).

Ho bisogno di avere alcune variabili (e alcuni typedef struct ...) "pubbliche", quindi utilizzabili in tutti e tre i moduli. Ovviamente devono condividere anche i valori e non solo il nome... quindi se in main i=5 anche in cfr.cpp i=5...

un po' come le Public di VB

Come posso fare?
thx :D

FinalFantasy
09-06-2004, 22:27
Se nno sbaglio...devi aggiungere la parola kiave extern nella dikiarazione della variabile:
extern int i;
non lo mai provato...

anx721
10-06-2004, 00:40
esatto, puoi ad esempio dichiare le variabili nel file del main, e poi ridichiarale, senza inizializzazione, e precedute da extern negli altri file.

P.S.: nella programmazione ad oggetti le variabili globali non dovrebbero essere usate, perkè invece non utilizzi delle variabili statiche di una classe? Essendo statiche sono visibili dapperutto, cioè dovunque venga inclusa la definizione della classe, ed esistono in un'unica copia, però sono chiuse all'interno di una classe, cosi tutto è piu coerente,

:ciauz:

Anªkin
10-06-2004, 01:10
Ma se io dichiarassi la variabile/struct all'esterno del main in uno qualsiasi dei tre file (con l'accortezza che la variabile/struct sia dichiarata prima delle classi che devono usarla)?

FinalFantasy
10-06-2004, 12:50
Originariamente inviato da Anªkin
Ma se io dichiarassi la variabile/struct all'esterno del main in uno qualsiasi dei tre file (con l'accortezza che la variabile/struct sia dichiarata prima delle classi che devono usarla)?

Credo proprio ke dovresti fare così:


//File ciao.cpp (senza main)

struct vostronome
{
char nome[21];
};

extern vostronome nome_della_variabile;

Beziel
10-06-2004, 12:51
basta che le dichiari come publiche e statiche


:ciauz:

Anªkin
10-06-2004, 14:25
Originariamente inviato da FinalFantasy
Credo proprio ke dovresti fare così:


//File ciao.cpp (senza main)
struct vostronome { char nome[21]; };
extern vostronome nome_della_variabile;

Sul codice che sto facendo io semplicemente dichiaro le mie strutture all'esterno del main
tipo ad es.
struct vostronome
{
char nome[21];
} nome_della_variabile;

e vi accedo da tutte le mie classi. Sempre dichiarando le strutture prima delle classi che dovranno usarle. Non so in eleganza, ma in funzionalità a me va :).

AleX ZeTa
10-06-2004, 14:30
sono troppo noob...

vediamo, ho sempre i miei tre moduli

main.cpp
cfr.h
cfr.cpp

ho bisogno di utilizzare un tipo così definito:



typedef struct tSeries {
vector<double> mTime;
vector<double> T1;
vector<double> T2;
vector<double> V;
vector<double> i;
} tSerie;


e di creare una variabile del genere:


vector<tSerie> mSerie;

ora... devo accedere a questa variabile da entrambi i *.cpp... come faccio? dove/come la dichiaro? (ho provato a mettere un po' di extern ma mi dà errore)

:ciauz:

andrea_NET-_DSL
10-06-2004, 15:02
Originariamente inviato da AleX ZeTa
sono troppo noob...

vediamo, ho sempre i miei tre moduli

main.cpp
cfr.h
cfr.cpp

ho bisogno di utilizzare un tipo così definito:



typedef struct tSeries {
vector<double> mTime;
vector<double> T1;
vector<double> T2;
vector<double> V;
vector<double> i;
} tSerie;


e di creare una variabile del genere:


vector<tSerie> mSerie;

ora... devo accedere a questa variabile da entrambi i *.cpp... come faccio? dove/come la dichiaro? (ho provato a mettere un po' di extern ma mi dà errore)

:ciauz:
se non erro metti la dichiarazione

extern tua_var;
su TUTTI i file .cpp in cui ti serve ;)

Ah se la vuoi inizializzare devi farlo solo in un file e negli altri fai come ti ho detto sopra

:ciauz:

AleX ZeTa
10-06-2004, 15:05
avevo provato... quando vado in make restituisce questo errore:


main.o(.text+0x144): In function `main':
/home/alex/Programmazione/C++/cfr/cfr/main.cpp:110: undefined reference to `mSerie'
main.o(.text+0x15f): In function `main':
/usr/include/c++/3.2.2/bits/stl_vector.h:980: undefined reference to `mSerie'
main.o(.text+0x183):/usr/include/c++/3.2.2/bits/stl_vector.h:981: undefined reference to `mSerie'
main.o(.text+0x1aa):/usr/include/c++/3.2.2/bits/stl_vector.h:986: undefined reference to `mSerie'
main.o(.text+0x1d1):/usr/include/c++/3.2.2/bits/stl_vector.h:988: undefined reference to `mSerie'
main.o(.text+0x1f8):/usr/include/c++/3.2.2/bits/stl_vector.h:989: more undefined references to `mSerie' follow
collect2: ld returned 1 exit status

che non è presente se tolgo quell'extern (ma a questo punto non mi vede le variabili dall'esterno)

ma forse ho capito male... se io la voglio dichiarare in main.cpp, l'extern lo devo mettere in main.cpp oppure in cfr.cpp? (io ora l'ho messo in main.cpp)

:ciauz:

Loading