下面的代碼不會在GCC編譯:C++和注入基本名稱
namespace One{
class A{
};
};
namespace Two{
class A{
public:
void what(){
cout << "Two::A says what!" << endl;
}
};
class B : public One::A{
public:
B(){
A xx;
xx.what();
}
};
};
,它給:
gccbug.cpp: In constructor ‘Two::B::B()’:
gccbug.cpp:23: error: ‘class One::A’ has no member named ‘what’
現在,有人告訴我,這是正確的行爲(由於注射基地一個的名稱::一個製造的A指的是一個:: A)。然而,這段代碼在C#中編譯(當然,在改變了一些東西之後),所以這似乎是C++特有的。
我想知道的是..爲什麼?是否有將基本名稱「One :: A」注入爲「A」的特定目的?
僅供參考,C#!= C++。我不確定你爲什麼要比較這兩個 – 2012-02-26 11:37:42
我不能肯定地說(我現在沒有我的副本),但作爲一個旁白,關於爲什麼C++語言被設計成它的方式的問題在Stroustrup的一本名爲「The Design and Evolution of C++」的書中經常被回答。 – 2012-02-26 12:07:37
@TonyTheLion,那是另一種類似c語言的編程語言,它具有「名稱空間」,我有權訪問編譯器。我並不是說只有「一種真實的方式」,這是正確的,但這看起來並不直觀,至少在這個例子中。 – kamziro 2012-02-26 12:28:13