2010-11-01 69 views
13

共享相同的名字比方說,我有一個叫做「富」在命名空間「ABC」類...類和命名空間在C++

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

...然後說我有一個名爲「ABC另一個類「在不同的命名空間

#include "foo.h" 

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

ABC ::一個會不會是定義類型,因爲它會搜索ABC類,不命名爲abc。我將如何去適當地引用另一個名稱空間中的對象,其中該其他名稱空間與我所在的類具有相同的名稱?

回答

22

您可以使用::abc::xx,即將變量或類型標識爲其絕對命名空間路徑。如果不指定絕對名稱,則相關名稱將在包含名稱空間/類中開始向上。

+0

首先響應!感謝大家! – Monster 2010-11-01 16:39:56

6

您可以使用前綴::表示從全局命名空間開始,所以你的情況::abc想從你的第一個代碼片斷表示abc命名空間。

5

您可以指定一個完全合格的名字從::定義全局命名空間開始,例如:

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