Wie kann ich mich auf eine externe C++ - namespace innerhalb einer geschachtelten ein?
-
03-07-2019 - |
Frage
Ich habe zwei namespaces definiert im Standard - /" - root-namespace", nsA und nsB. nsA hat ein sub-namespace, nsA::subA.Wenn ich versuche, verweisen auf eine Funktion, die gehört zu nsB, von innen nsA::subA, Bekomme ich einen Fehler:
undefined reference to `nsA::subA::nsB::theFunctionInNsB(...)'
Irgendwelche Ideen?
Lösung
Brauchen mehr Informationen, um zu erklären, dass Fehler.Der folgende code ist in Ordnung:
#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();
}
So, während die Angabe der Globale namespace löst dein Aktuelles problem, in der Regel ist es möglich zu finden die Symbole in der nsB ohne es.Andernfalls müssten Sie schreiben ::std::cout, ::std::string, etc, wenn Sie wurden in einen anderen namespace-Gültigkeitsbereich.Und Sie nicht.QED.
Die Angabe der Globale namespace ist für Situationen, in denen es ein anderes nsB im aktuellen Gültigkeitsbereich sichtbar - zum Beispiel, wenn die nsA::subA enthaltenen seine eigenen namespace oder eine Klasse namens nsB, und Sie möchten, rufen Sie ::nsbB:foo, anstatt nsA::subA::nsB::foo.So würden Sie erhalten die Fehlermeldung, die Sie zitieren, wenn Sie zum Beispiel erklärt haben (aber nicht definiert) nsA -:: subA::nsB::theFunctionInNsB(...).Hast du vielleicht #include die header für die nsB von innen namespace subA?
Andere Tipps
Verwenden globalen Bereich Auflösung:
::nsB::TheFunctionInNsB()
#include <stdio.h>
namespace nsB {
void foo() {
printf( "nsB::foo()\n");
}
}
namespace nsA {
void foo() {
printf( "nsA::foo()\n");
}
namespace subA {
void foo() {
printf( "nsA::subA::foo()\n");
printf( "calling nsB::foo()\n");
::nsB::foo(); // <--- calling foo() in namespace 'nsB'
}
}
}
int main()
{
nsA::subA::foo();
return 0;
}