o hatayı açıklamak Daha fazla bilgi gerekiyor. Aşağıdaki kod gayet: Yani
#include <iostream>
namespace nsB {
void foo() { std::cout << "nsB\n";}
}
namespace nsA {
void foo() { std::cout << "nsA\n";}
namespace subA {
void foo() { std::cout << "nsA::subA\n";}
void bar() {
nsB::foo();
}
}
}
int main() {
nsA::subA::bar();
}
, küresel ad alanını geçerli sorunu çözer iken, genel olarak onsuz NSB sembollere başvurmak mümkündür. Aksi takdirde, başka bir isim-alanı kapsamında olduğunuzda, :: std :: cout, :: std :: string, vb. Ve sen yapmıyorsun. QED.
Genel ad boşluğunun belirtilmesi, geçerli kapsamda başka bir nsB'nin görülebileceği durumlar içindir - örneğin, nsA :: subA, kendi ad alanını veya nsB adlı sınıfı içeriyorsa, ve şunu aramak istersiniz: nsBB: fons yerine nsA :: Suba :: NSB :: foo. Yani, örneğin, (ancak tanımlanmamış) nsA :: subA :: nsB :: theFunctionInNsB (...) bildirdiyseniz, teklif verdiğiniz hatayı alırsınız. NsB için alt alan adının içinden #include girebilir miydiniz?
"İç ad alanı alt ağından nsB için başlığa sahip olabilir misiniz?" - Gerçekten de vardı. Harika yakalama ve iyi bir açıklama. – mikeh