2012-04-15 4 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.

это происходит в г ++ 4.5 с опцией C++ 0x включен

+0

Возможно, вам не хватает включить в свой код или множество важных деталей в вопросе. Если вложения являются правильными, тогда у вас может быть несколько пространств имен/классов с тем же именем, и компилятор выбирает неправильный. [Проверить это] (http://ideone.com/bsy8q) –

+0

Ваш комментируемый код компилируется для меня. –

ответ

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

+1

@lurscher ну тогда он должен скомпилировать: http://ideone.com/gFBSB –

+0

@lurscher вы, вероятно, должны скопировать-вставить код, это, вероятно, другое вопрос. –

Смежные вопросы