2013-01-14 11 views
5

Der folgende Code funktioniert einwandfrei:extern lokale Variable für die globale Variable innerhalb Namespace

file1.cpp

//global variable 
int g_myvar1 = 5; 

file2.cpp

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

Wie kann ich tun, wenn file1 file2.cpp .cpp ist wie folgt:

file1.cpp

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

NOTE1, folgender Kompilierungsfehler auf GCC 4.7 "ungültig Verwendung qualifizierter-namen". Ich habe 'namespace' auch ohne Glück versucht.

NOTE2, das folgende funktioniert, aber ich suche nur-lokale variable Definition.

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

Antwort

3

Verwendung using:

void f() 
{ 
    using myns::g_myvar1; 

    ++g_myvar1; 
} 

Sie haben erklären die Variablen (mit extern Schlüsselwort) in .h Datei in einem Namespace myns und definieren sie in .cpp Datei. Und fügen Sie die Header-Datei überall dort ein, wo Sie die Variablen verwenden möchten.

+1

+1 für die neue Verwendung von Keyword. Aber das erfordert immer noch die Deklaration von "namespace mynm {extern int g_myvar1;}" vor void f() – Yousf

+0

@Yousf: Ja, es ist besser, sie in '.h' zu deklarieren * und * in * zu definieren. cpp' Datei. – Nawaz

1

Setzen Sie den Namensraum mit der extern Deklaration in einer Header-Datei und schließt, dass die Header-Datei in allen Quelldateien, die Variable zu benötigen.

+0

Ich weiß, das ist die beste Lösung, aber ich war auf der Suche nach einer Lösung, die dies nicht benötigen. – Yousf

+0

@Yousf In C und C++ müssen Dinge deklariert werden, bevor sie verwendet werden, so einfach ist das. Wenn Sie keine Deklaration des Namespace oder der darin enthaltenen Daten haben, wird der Compiler diese Namen nicht kennen. –

Verwandte Themen