2016-12-18 5 views
1

Не уверен, что это возможно, но у меня есть два класса с одинаковым именем на разных уровнях вложенного пространства имен, и я хотел бы сделать более мелким класс друга более глубокого класса. Пример:Класс класса С ++ с тем же именем на разных уровнях вложенного пространства имен

В File1.h:

namespace A 
{ 
    class Foo 
    { 
    //stuff 
    }; 
} 

В File2.h:

namespace A 
{ 
    namespace B 
    { 
    class Foo 
    { 
     friend class A::Foo; //Visual Studio says "Error: 'Foo' is not a member of 'A'" 
    }; 
    } 
} 

Возможно ли это? Если да, то какой правильный синтаксис?

+2

ли вы включать '' File1.h' в File2.h'? – StoryTeller

ответ

0

Этот код компилируется при размещении в одном файле (за исключением того, что ; необходим после класса A::B::Foo): IdeOne example.

Таким образом, проблема заключается в коде, который не включен в текст вопроса. Возможно, #include "File1.h" был забыт в File2.h.

0

Если вы хотите, чтобы избежать включения больших заголовков файлов в другие, что вам нужно, по крайней мере вперед объявить классы перед их использованием:

namespace A 
{ 
    class Foo; 

    namespace B 
    { 
    class Foo 
    { 
     friend class A::Foo; 
    } 
    } 
}