2012-04-15 18 views
0

Ich bin ein ähnliches Problem wie this question, jedoch mit einer zusätzlichen Tiefe:Bezug auf einen Cousin Namespace

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

als ich versuchte, die oben, erhalte ich einen Fehler

Fehler: ‚root: : parent2 :: childb :: parent1 :: childa 'wurde nicht deklariert

ich verstehe nicht, warum das nicht funktioniert, ich habe den Eindruck, dass es sollte. Ich möchte wirklich keine Verwendungsdeklaration innerhalb der someFunc Funktion setzen müssen.

dies in g geschieht ++ 4.5 mit C++ 0x-Option aktiviert

+0

Vermutlich fehlt Ihnen in Ihrem Code ein Include oder viele wichtige Details in der Frage. Wenn die Includes korrekt sind, haben Sie möglicherweise mehrere Namespaces/Klassen mit demselben Namen, und der Compiler wählt die falsche aus. [Check this] (http://ideone.com/bsy8q) –

+0

Ihr posted code kompiliert für mich gut. –

Antwort

2

Sie fehlen einige Öffnung Klammern:

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

Dies ist einer der Gründe, Vertiefung wichtig ist.

+0

ja sorry das war nicht absichtlich, ich reparierte das auf der Frage – lurscher

+1

@lurscher gut dann, sollte es kompilieren: http://ideone.com/gFBSB –

+0

@lurscher sollten Sie wahrscheinlich den Code kopieren-einfügen, es ist wahrscheinlich ein anderer Problem. –