我试图了解将朋友声明注入命名空间:
#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 但这可能只适用于静态成员函数?