В классе sim_mob::B
вы подружитесь с классом sim_mob:A
, но надеетесь, что эта дружба простирается до geo::A
, чего, очевидно, нет.Чтобы решить эту проблему, вам нужно объявить geo::A
, прежде чем сделать его другом:
namespace geo { class A; }
namespace sim_mob
{
class B
{
friend class geo::A;
private:
B(int){}
};
}
Тот факт, что он "работает" с конструктором по умолчанию, я полагаю, вы скорее объявили функциючем создать экземпляр объекта:
sim_mob::B b();
- это объявление функции.Если вы пропустите скобки, то получите сообщение об отсутствии конструктора по умолчанию или, если вы действительно его объявите, о недоступности.