2010-11-01 70 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 
    }; 
}