C++ 关于C++;未命名的命名空间 #包括 名称空间 { INTA=1; } INTA=2,b=3; 内部主(空) { std::cout

C++ 关于C++;未命名的命名空间 #包括 名称空间 { INTA=1; } INTA=2,b=3; 内部主(空) { std::cout,c++,namespaces,C++,Namespaces,使用未命名的名称空间,这是不可能的。请参阅下面的文章 您必须选择命名名称空间。不,您不能。您可以这样解决它: #include <iostream> namespace { int a=1; } int a=2,b=3; int main(void) { std::cout<<::a<<::b; return 0; } 名称空间 { 名称空间xxx { INTA=1; } } ... std::cout

使用未命名的名称空间,这是不可能的。请参阅下面的文章


您必须选择命名名称空间。

不,您不能。您可以这样解决它:

#include <iostream>

namespace
{
        int a=1;
}

int a=2,b=3;

int main(void)
{
        std::cout<<::a<<::b;
        return 0;
}
名称空间
{
名称空间xxx
{
INTA=1;
}
}
...

std::cout
中的
:a
指全局名称空间。匿名名称空间应通过
a
访问(或者更具体地说,您根本不应该这样做)

您可以访问全局名称空间,但不要重新定义它

namespace
{
    namespace xxx
    {
        int a = 1;
    }
}
...
std::cout << xxx::a << ::b;
#包括
名称空间
{
INTA=1;
}
int b=3;
内部主(空)
{

std::coutthank you for help~,我只是混淆了全局名称空间和匿名名称空间~@visitor:要访问匿名a还是全局a?如果从询问者提供的代码中删除
,那么代码将无法编译(简单的
a
可以同时引用这两个)。类似地,如果要删除全局
a
,则
a
::a
似乎都是指未命名的
a
(抱歉,但答案似乎完全错误。)UncleBens:我可能错了,是的,您可以通过使用a和::a访问匿名a,但是,尽管我这里没有定义,但我非常确定::的定义是在匿名之前更喜欢全局名称空间。
#include <iostream>

namespace
{
        int a=1;
}


int b=3;

int main(void)
{
        std::cout<<::a<<::b;
    return 0;
}