Geschachtelte NameSpaces in C ++
Ich bin verwirrt, was zu tun ist, wenn mit verschachtelten namespaces und Deklarationen von Objekten.
Ich bin die Portierung von code, die links gegen eine statische Bibliothek, die hat ein paar namespaces.
Beispiel von was ich spreche:
namespace ABC {
namespace XYZ {
//STUFF
}
}
Im code, was muss ich tun, um ein Objekt zu deklarieren, ist im namespace XYZ
?
wenn ich versuchen:
XYZ::ClassA myobject;
oder:
ABC::XYZ::ClassA myobject;
oder:
ABC::ClassA myobject;
Bekomme ich
nicht Namen eine Art
Fehler, obwohl ClassA
definitiv vorhanden ist.
Was ist die richtige hier?
InformationsquelleAutor der Frage jDOG | 2010-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kommt es auf den namespace, die Sie bereits sind:
Wenn man keine Namespaces oder einer anderen, unabhängigen namespace, dann müssen Sie angeben, um den ganzen Weg
ABC::XYZ::ClassA
.Wenn Sie in
ABC
können Sie überspringen dieABC
und nur schreibenXYZ::ClassA
.Auch erwähnenswert, dass, wenn Sie wollen, beziehen sich auf eine Funktion, die nicht in einem Namensraum (oder "root" - namespace), können Sie das Präfix durch
::
:Beispiel:
InformationsquelleAutor der Antwort ereOn
Wenn
myobject
deklariert ist, - namespace, und Sie möchten, deklarieren Sie es wieder (für die Definition), Sie tun es, indem Sie seinen Namen, nicht seine Art.Wenn der Typ erklärt in diesem namespace zu, Sie müssen auch als Präfix den Namen des Typs
Es nur selten benötigt, deklarieren Sie ein Objekt, dass wie. Oft ist die erste Deklaration eines Objekts wird auch seine definition. Wenn Sie möchten, deklarieren Sie die Objekt, die Sie haben, es zu tun in diesem namespace. Im folgenden erklärt und definiert, "myobject",
Wenn Sie definiert haben, im Objekt-wie diese, die Sie finden, um es mit den Worten
ABC::XYZ
. Sie haben nicht zu "erklären", dass das Objekt irgendwie in Ordnung, es zu benutzen lokalInformationsquelleAutor der Antwort Johannes Schaub - litb