2010-11-01 8 views
13

Sagen wir, ich habe eine Klasse ‚foo‘ im Namensraum „abc“ genannt ...Klassen und Namespaces den gleichen Namen in C++ teilen

namespace abc { 
    class foo { 
     int a; 
     int b; 
    }; 
} 

... und dann sagen, ich habe eine andere Klasse namens „abc "in einem anderen Namespace

#include "foo.h" 

namespace foo { 
    class abc { 
     abc::a = 10; 
    }; 
} 

abc :: a würde kein definierter Typ sein, denn es ist Klasse abc würde die Suche, nicht Namespace abc. Wie würde ich dazu übergehen, auf ein Objekt in einem anderen Namespace zu verweisen, wobei dieser andere Namespace denselben Namen wie die Klasse, in der ich bin, hat?

Antwort

22

Sie können ::abc::xx verwenden, dh die Variable oder den Typ als absoluten Namespacepfad angeben. Wenn Sie keinen absoluten Namen angeben, beginnen relative Namen in den einschließenden Namespaces/Klassen nach oben zu gehen.

+0

erste Antwort! Danke allen! – Monster

6

Sie können einen Präfix verwenden :: aus dem globalen Namensraum beginnen zu bezeichnen, so in Ihrem Fall ::abc den abc Namespace von Ihrem ersten Code-Schnipsel bezeichnen würde.

5

Sie können einen voll qualifizierten Namen von :: Start angeben, die den globalen Namensraum definiert, z.B .:

namespace abc { 
    class foo { 
     int a; 
     int b; 
    }; 
} 

namespace foo { 
    class abc { 
     ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile 
    }; 
}