前向声明和朋友功能

时间:2014-10-16 01:38:42

标签: c++ forward-declaration

我有以下代码

class foo
{
public:
    foo()   {}
private:
    int foo_int;
    friend class bar;  //----->Statement A               
};

class bar 
{
public:
    void someMethod()
    {
        foo f;
        f.foo_int = 13;
    }
};

现在我也在SO上阅读this回答。但是,为了原因,我无法将拼图拼凑起来 编译器将bar识别为类型。我的印象是,它会抱怨Bar是一个不完整的类型但是没有发生。我的问题是为什么?

2 个答案:

答案 0 :(得分:2)

  

朋友班吧;

只是一个声明......编译器没有什么可抱怨的。对不完整类型的限制是当编译器需要关于它没有的类型的信息时,例如它的大小,或者对于基类,它的成员,但对于friend它不需要的信息。除了它的名字以外的任何东西。

请注意,friend声明在类定义中发生的位置并不重要... private:后面的{{1}}声明并不是私有的。把它放在类定义的顶部会更好。

答案 1 :(得分:1)

尚未声明的类的friend规范作为该类的声明。将不完整类型声明为类的朋友是完全正确的,因为编译器只需要知道正在声明的类型