:C++命名空间
#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
,一个类被命名空间内declard。 该类定义如下。
班级中的变量将被全球访问。这个 是命名空间的目标。
ns_call.cpp然后访问该类的成员x1。
2档在Fedora中被用gcc编译5.4.1确定14 运行输出是:
pre 2
post 2
我的预期 '后100',因为我想访问INT X1 A类 全球。
这没有链接:'未定义的'a'参考(它在'main'中声明,不是全局声明)。 –
这是违反ODR的 - ns_capp.cpp中'ns :: A'的定义与ns.cpp中的定义不同。 – ildjarn
移动“ns :: A a;”增加6条线。它的作品。 –