ns.cpp
:
#include <iostream>
namespace ns { // want to access this globally
class A ;
}
class ns::A {
public:
int x1;
char s1[128];
};
int main()
{
int doit();
//using namespace ns;
ns::A a;
a.x1= 2;
std::cout << "pre " << a.x1 << "\n" ;
doit();
std::cout << "post " << a.x1 << "\n" ;
}
ns_call.cpp
:
namespace ns {
class A;
}
class ns::A {
public:
int x1;
char s1[];
};
using namespace ns;
int
doit()
{
extern ns::A a;
a.x1= 100;
}
在 ns.cpp 中,在命名空间中声明了一个类。类定义如下。
类中的变量将被全局访问。这是命名空间的目标。
ns_call.cpp 然后访问该类成员的 1,x1。
这两个文件在 Fedora 14 中使用 gcc 5.4.1 编译成功。运行输出为:
pre 2
post 2
我期望“发布 100”,因为我想在全球范围内访问 A 类中的 int x1。