2013-01-14 48 views
5

下面的代碼工作正常:的extern局部變量

file1.cpp

//global variable 
int g_myvar1 = 5; 

file2.cpp

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

我該怎麼辦file2.cpp如果file1 .cpp如下:

file1.cpp

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

注1,以下給出GCC 4.7「合格名稱無效使用」的編譯錯誤。我嘗試'使用命名空間'也沒有運氣。

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

注2,以下工作,但我正在尋找唯一的局部變量定義。

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

回答

3

使用using

void f() 
{ 
    using myns::g_myvar1; 

    ++g_myvar1; 
} 

您已經.h文件中的一個命名空間myns聲明變量(與extern關鍵字),並在文件.cpp定義他們。並將頭文件包含在要使用變量的任何位置。

+1

+1用於使用關鍵字的新用法。但是這仍然需要在void f()之前聲明「namespace mynm {extern int g_myvar1;}」。() – Yousf

+0

@yousf:是的,最好是在'.h'文件中聲明它們,並且在'中定義它們。 cpp'文件。 – Nawaz

1

將帶有extern聲明的名稱空間放在頭文件中,並將該頭文件包含在所有需要該變量的源文件中。

+0

我知道這是最好的解決方案,但我正在尋找一個不需要這個解決方案的解決方案。 – Yousf

+0

@Yousf在C和C++中,事情必須在使用之前進行聲明,就像這樣簡單。如果您沒有對名稱空間或其中的數據進行某種聲明,編譯器將不知道這些標識符名稱。 –