В предыдущем Q & A (How do I define friends in global namespace within another C++ namespace?) решение было дано для создания друга определение функции в пространстве имен, которое ссылается на функцию в глобальном пространстве имен.Как определить класс друга из глобального пространства имен в другом пространстве имен?
У меня тот же вопрос для классы.
class CBaseSD;
namespace cb {
class CBase
{
friend class ::CBaseSD; // <-- this does not work!?
private:
int m_type;
public:
CBase(int t) : m_type(t) {};
};
}; // namespace cb
class CBaseSD
{
private:
cb::CBase* m_base;
public:
CBaseSD(cb::CBase* base) : m_base(base) {};
int* getTypePtr()
{ return &(m_base->m_type); };
};
Если я ставлю CBaseSD в пространство имен, оно будет работать; например, класс друга SD :: CBaseSD; , но я не нашел заклинание, которое работает для глобального пространства имен.
Я компилирую с g ++ 4.1.2.
Работает хорошо здесь (VC++ 2008) – Manuel
GCC, кажется, жалуются на ненужную точку с запятой после закрывающей фигурной скобки имен Сь – Manuel
Manuel прав его работоспособность даже в vC++ 2003, поэтому 1+. – Ashish