: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條線。它的作品。 –