2012-04-15 60 views
0

我遇到类似this question一个问题,但有一个额外的深度:指的是表弟的命名空间

namespace root { namespace parent1 { namespace childa { 
    class hard_to_get_at{}; 
}}} 

namespace root { namespace parent2 { namespace childb { 
    // how do I refer refer to namespace childb relative to the current namespace ? 
    void someFunc() 
    { 
     parent1::childa::hard_to_get_at instance; // does not work 
    } 
}}} 

当我试图上面,我得到一个错误

错误:“根: :parent2 :: childb :: parent1 :: childa'还没有宣布

我不明白为什么这不起作用,我得到它应该的印象。我真的不想在someFunc函数中使用使用声明。

这是发生在G ++ 4.5用C++ 0x中选择启用

+0

您可能在代码中缺少包含,或者在问题中存在大量重要细节。如果包含是正确的,那么你可能有多个名称空间/类具有相同的名称,编译器选择了不正确的名称空间。 [检查此](http://ideone.com/bsy8q) – 2012-04-15 20:21:21

+0

您发布的代码为我编译罚款。 – 2012-04-15 20:22:29

回答

2

你错过了一些开放括号:

namespace root { namespace parent1 { namespace childa { // <--- here 
    class hard_to_get_at{}; 
}}} 

namespace root { namespace parent2 { namespace childb { // <--- and here 
    // how do I refer refer to namespace childb relative to the current namespace ? 
    void someFunc() 
    { 
     parent1::childa::hard_to_get_at instance; // does not work 
    } 
}}} 

这其中的道理缩进是非常重要的一个。

+0

对不起,这不是故意的,我解决了这个问题 – lurscher 2012-04-15 20:16:47

+1

@lurscher那么,它应该编译:http://ideone.com/gFBSB – 2012-04-15 20:17:52

+0

@lurscher你应该复制粘贴代码,它可能是一个不同的问题。 – 2012-04-15 20:19:53