【问题标题】:extern local variable for global variable inside namespace命名空间内全局变量的外部局部变量
【发布时间】:2012-12-28 09:46:23
【问题描述】:

以下代码可以正常工作:

file1.cpp

//global variable
int g_myvar1 = 5;

file2.cpp

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

如果file1.cpp如下怎么办file2.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++
}

【问题讨论】:

    标签: c++ namespaces extern


    【解决方案1】:

    使用using:

    void f()
    { 
       using myns::g_myvar1;
    
       ++g_myvar1;
    }
    

    您已在命名空间myns 中的.h 文件中声明变量(使用extern 关键字),并在.cpp 文件中定义它们.并在任何你想使用变量的地方包含头文件。

    【讨论】:

    • +1 用于 using 关键字的新用法。但这仍然需要在 void f() 之前声明“namespace mynm{extern int g_myvar1;}”
    • @Yousf: 是的,最好在.h文件中声明它们,然后在.cpp文件中定义它们。跨度>
    • @Yousf 谢谢。我花了很长时间才找到那个语法。根据您的建议,您不需要使用。
    【解决方案2】:

    将带有extern 声明的命名空间放在头文件中,并将该头文件包含在所有需要该变量的源文件中。

    【讨论】:

    • 我知道这是最好的解决方案,但我一直在寻找不需要此包含的解决方案。
    • @Yousf 在 C 和 C++ 中,东西必须在使用前声明,就这么简单。如果您没有某种命名空间或其中的数据的声明,编译器将不知道这些标识符名称。
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2022-08-02
    • 2019-07-24
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多