2010-11-01 14 views
13

Diciamo che ho una classe chiamata 'foo' nello spazio dei nomi "abc" ...classi e spazi dei nomi che condividono lo stesso nome in C++

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

... e poi dire ho un'altra classe chiamata "abc "in uno spazio dei nomi diverso

#include "foo.h" 

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

abc :: a non sarebbe un tipo definito, perché sarebbe alla ricerca di classe abc, non namespace abc. Come andrei a riferire correttamente un oggetto in un altro spazio dei nomi, in cui quell'altro spazio dei nomi aveva lo stesso nome della classe in cui mi trovo?

risposta

22

È possibile utilizzare ::abc::xx, ovvero identificare la variabile o il tipo come percorso assoluto dello spazio dei nomi. Se non si specifica un nome assoluto, i nomi relativi iniziano a salire nei namespace/classi inclusi.

+0

prima risposta! Grazie a tutti! – Monster

6

È possibile utilizzare un prefisso per indicare :: a partire dal namespace globale, così nel tuo caso sarebbe ::abc indicare lo spazio dei nomi abc dal tuo primo frammento di codice.

5

È possibile specificare un nome completo a partire dal :: che definisce lo spazio dei nomi globale, ad es .:

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 
    }; 
} 
Problemi correlati