其次,大家只看编译结果,而所谓的“弱智感知”只是给你一个参考。
当编译器分析到 friend void Goodgay::visit02(); 时,它知道 Goodgay 是个什么东西吗?所以这一句时它就错了。
举个例子:
class A
{
private:
int value;
};
class B
{
public:
void fun( A& a )
{
a.value = 0;
}
};
{
private:
int value;
};
class B
{
public:
void fun( A& a )
{
a.value = 0;
}
};
要想编译通过,要么简单点儿,直接在 class A 中添加 friend class B;
若想只让 B::fun 成为友元,得:
class A;
class B
{
public:
void fun( A& a );
};
class A
{
private:
int value;
friend void B::fun( A& a );
};
void B::fun( A& a )
{
a.value = 0;
}
class B
{
public:
void fun( A& a );
};
class A
{
private:
int value;
friend void B::fun( A& a );
};
void B::fun( A& a )
{
a.value = 0;
}