名前空間へのフレンド宣言の注入を理解しようとしています:
#include <iostream>
using namespace std;
namespace Z { //forward declaration
class X;
}
class Y {
public:
void func(Z::X*, int);
};
namespace Z {
class X {
int i;
public:
X() : i(999) {}
friend void Y::func(Z::X*, int);
void print(void) { cout << i << endl; }
};
}
void Y::func(Z::X* ptr, int i)
{
ptr->i = 40;
}
int main(void)
{
Z::X zx;
zx.print();
Y y;
y.func(&zx, 40);
zx.print();
using namespace Z;
// func(&zx, 30); DOES NOT WORK
}
friendInject.cc:39: エラー: 'func' はこのスコープで宣言されていません 本書には、「囲まれたクラス内で宣言することにより、名前空間にフレンド宣言を挿入できます」と書かれています。「今、関数 you() は名前空間 Me のメンバーです。」
これは一体何を意味するのでしょうか?? Y::func を試してみましたが、おそらく静的メンバー関数でしか機能しませんか??