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 は、クラスのメンバー x1 の 1 つにアクセスします。
2 つのファイルは、Fedora 14 の gcc 5.4.1 で正常にコンパイルされました。実行出力は次のとおりです。
pre 2
post 2
クラスAのint x1にグローバルにアクセスしたかったので、「post 100」を期待していました。