以前のQ&A(別のC ++名前空間内のグローバル名前空間でフレンドを定義するにはどうすればよいですか? )では、グローバル名前空間内の関数を参照するネームスペース内でフレンド関数定義を作成するためのソリューションが提供されました。
クラスについても同じ質問があります。
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でコンパイルしています。