如何在这种情况下使成员函数成为友元函数?

时间:2013-03-16 14:45:50

标签: c++ function friend incomplete-type

我对如何使用好友功能完成以下操作感到困惑。

假设我有一个A类,其成员函数'f'将被宣布为B类的朋友。

正如我所理解的那样,正常的解决方案就是这样:

定义A类,其中'f'仅被声明为未定义

定义B类,包括'f'的朋友声明

定义'f'

现在,如果A类具有类型B的数据成员或B类型元素的容器,如vector< B&gt ;.

前向声明B类似乎有效(即没有编译器警告/错误),但我不确定它是否符合C ++ 11标准。此外,这样的解决方案将不允许我使用类B的构造函数为A类的B类成员提供类内初始化程序。根据C ++ 11,完成所有这些的最佳方法是什么? ?

我尝试从标准本身找到解决方案,但未能找到这种情况的提及。如果有人能指出我,我会很高兴。

PS我真的是初学者,所以请不要在你的答案中另有假设。我不介意详细解答:)

1 个答案:

答案 0 :(得分:0)

您应该阅读有关此问题的MSDN文章: Class Member Functions and Classes as Friends

基本上你需要做的是拥有一个带有函数A的类类型f(),然后在类类型B中声明存在一个函数A::f()这将是你的朋友。

MSDN示例很好地说明了这一点:

class A {
public:
   int Func1( B& b );

private:
   int Func2( B& b );
};

class B {
private:
   int _b;

   // A::Func1 is a friend function to class B
   // so A::Func1 has access to all members of B
   friend int A::Func1( B& );
};

int A::Func1( B& b ) { return b._b; }   // OK
int A::Func2( B& b ) { return b._b; }   // C2248