は、そのエラーを説明するために、より多くの情報が必要です。次のコードは、罰金です:だから
#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();
}
、グローバル名前空間を指定すると、あなたの現在の問題を解決しながら、一般的には、それなしNSB内のシンボルを参照することが可能です。それ以外の場合は、別の名前空間のスコープを使用しているときはいつでも:: std :: cout、:: std :: stringなどを記述する必要があります。そして、あなたはしません。 QED。
グローバル名前空間を指定すると、現在のスコープに別のnsBが表示される場合があります。たとえば、nsA :: subAにはnsBという独自の名前空間またはクラスが含まれていて、nsAではなくnsbB:foo :: subA :: nsB :: foo。たとえば、nsA :: subA :: nsB :: theFunctionInNsB(...)を宣言している(ただし、定義されていない)場合は、あなたが引用したエラーが出ます。おそらく、名前空間subAの内側からnsBのヘッダを#含まれていましたか?
"おそらく#名前空間のサブAからnsBのヘッダーを#含まれましたか?" - 確かに、私は持っていた。偉大なキャッチ、そして良い説明。 – mikeh