2013-01-14 24 views
5

Poniższy kod działa poprawnie:extern zmiennej lokalnej do globalnej zmiennej wewnątrz przestrzeni nazw

file1.cpp

//global variable 
int g_myvar1 = 5; 

file2.cpp

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

Jak mogę zrobić file2.cpp jeśli plik1 .cpp jest następująca:

file1.cpp

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

UWAGA 1, poniżej przedstawiono błąd kompilacji w GCC 4.7 "nieprawidłowe użycie kwalifikowanej nazwy". Próbowałem "używać przestrzeni nazw" bez powodzenia.

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

UWAGA 2, Następujące prace, ale szukam tylko zmiennej lokalnej.

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

Odpowiedz

3

Zastosowanie using:

void f() 
{ 
    using myns::g_myvar1; 

    ++g_myvar1; 
} 

Masz zadeklarować zmienne (z extern słów kluczowych) w .h pliku w obszarze nazw myns i określić je .cpp pliku. I dołącz plik nagłówkowy wszędzie tam, gdzie chcesz używać zmiennych.

+1

+1 za nowe użycie słowa kluczowego. Ale to nadal wymaga deklaracji "namespace mynm {extern int g_myvar1;}" przed void f() – Yousf

+0

@Yousf: Tak, lepiej jest * deklarować * je w pliku '.h' i * definiować * je w'. plik cpp. – Nawaz

1

Umieść przestrzeń nazw w deklaracji extern w pliku nagłówkowym i dołącz ten plik nagłówkowy do wszystkich plików źródłowych wymagających tej zmiennej.

+0

Wiem, że to najlepsze rozwiązanie, ale szukałem rozwiązania, które tego nie wymaga. – Yousf

+0

@Yousf W C i C++ rzeczy muszą być zadeklarowane zanim zostaną użyte, to takie proste. Jeśli nie masz deklaracji przestrzeni nazw lub danych w niej zawartych, kompilator nie będzie znał tych nazw identyfikatorów. –

Powiązane problemy