2013-01-14 19 views
5

Il seguente codice funziona correttamente:extern variabile locale per la variabile globale all'interno dello spazio dei nomi

file1.cpp

//global variable 
int g_myvar1 = 5; 

file2.cpp

int myfunc() 
{ 
    extern int g_myvar1; 
    g_myvar1++ 
} 

Come posso fare file2.cpp se file1 .cpp è la seguente:

file1.cpp

namespace myns 
{ 
    //global variable 
    int g_myvar1 = 5; 
} 

NOTA 1, ciò che segue dà errore di compilazione su GCC 4.7 "uso non valido del nome qualificato". Ho provato a "usare namespace" senza fortuna.

int myfunc() 
{ 
    extern int myns::g_myvar1; 
    g_myvar1++ 
} 

NOTA2, Il seguente funziona, ma sto cercando solo la definizione di variabile locale.

namespace myns 
{ 
    //global variable 
    extern int g_myvar1; 
} 
int myfunc() 
{ 
    myns::g_myvar1++ 
} 

risposta

3

Uso using:

void f() 
{ 
    using myns::g_myvar1; 

    ++g_myvar1; 
} 

Hai dichiarare le variabili (con extern parola chiave) in .h file in uno spazio dei nomi myns e definire loro in .cpp file. E includi il file di intestazione ovunque tu voglia usare le variabili.

+1

+1 per il nuovo utilizzo dell'uso della parola chiave. Ma questo richiede ancora la dichiarazione di "namespace mynm {extern int g_myvar1;}" prima di void f() – Yousf

+0

@Yousf: Sì, è meglio * dichiararli * nel file '.h' e * definirli * in'. file cpp'. – Nawaz

1

Inserire lo spazio dei nomi con la dichiarazione extern in un file di intestazione e includere il file di intestazione in tutti i file di origine che richiedono tale variabile.

+0

So che questa è la soluzione migliore, ma stavo cercando una soluzione che non necessitasse di questo. – Yousf

+0

@Yousf In C e C++ le cose devono essere dichiarate prima di essere utilizzate, è così semplice. Se non si dispone di alcun tipo di dichiarazione dello spazio dei nomi o dei dati al suo interno, il compilatore non conoscerà tali nomi di identificatori. –

Problemi correlati