2010-11-01 14 views
13

powiedzmy mam klasy o nazwie „foo” w przestrzeni nazw „abc” ...Klasy i nazw dzielą tę samą nazwę w C++

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

... a potem, że mam inną klasę o nazwie „abc "w innej przestrzeni nazw

#include "foo.h" 

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

abc :: a nie być zdefiniowany typ, ponieważ byłoby poszukiwanie klasy abc abc, a nie nazw. W jaki sposób mógłbym poprawnie odwoływać się do obiektu w innym obszarze nazw, w którym ta druga przestrzeń nazw miała taką samą nazwę jak klasa, w której się znajduję?

Odpowiedz

22

Można użyć ::abc::xx, to znaczy określić zmienną lub typ jako bezwzględną ścieżkę obszaru nazw. Jeśli nie określisz nazwy bezwzględnej, nazwy względne zaczną iść w górę w tym obszarach nazw/klasach.

+0

pierwsza odpowiedź! Dziękuję wszystkim! – Monster

6

Można użyć prefiksu :: oznaczający wychodząc z globalnej przestrzeni nazw, więc w Twoim przypadku ::abc będzie oznaczać nazw abc od pierwszego fragmentu kodu.

5

Można podać pełną nazwę począwszy od :: który określa globalną przestrzeń nazw, np .:

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 
    }; 
} 
Powiązane problemy