判断一下下面这段代码能否通过编译?
#include <iostream>
#include <string>
#include <memory>
using namespace std;
struct B;
extern void F(B* b);
struct B
{
struct A
{
friend void F(B* b);
};
private:
int data;
};
void F(B* b)
{
cout << b->data << endl;
}
int main()
{
B b;
F(&b);
return 0;
}
<label class="jsk-checkbox"> 不能。
</label>因为A只是赋予了F访问A所有成员的能力。尽管A是B的内部类,可以看到B的所有东西,但是A不能替B做出friend的这个决定。

京公网安备 11010502036488号