朋友会员功能无法访问私人会员

时间:2014-06-30 16:22:38

标签: c++ visual-c++ intellisense friend access-control

我有以下内容:

class B;

class A
{
public:
    int AFunc(const B& b);
};

class B
{
private:
    int i_;
    friend int A::AFunc(const B&);
};

int A::AFunc(const B& b) { return b.i_; }

对于AFunc的定义,我认为该成员B::i_无法访问。我做错了什么?

编译:MSVC 2013。

更新:将AFunc更改为公开,现在代码已编译。但是我仍然收到IntelliSense错误。这是IntelliSense的问题吗?

1 个答案:

答案 0 :(得分:2)

问题是你将另一个类的private函数声明为friendB通常不应该了解A的私人会员功能。 G ++ 4.9有如下说法:

test.cpp:6:9: error: 'int A::AFunc(const B&)' is private
     int AFunc(const B& b);
         ^
test.cpp:13:33: error: within this context
     friend int A::AFunc(const B&);
                                 ^

要解决此问题,只需将B声明为A的朋友:

class A
{
    friend class B;
private:
    int AFunc(const B& b);
};

您可能对Microsoft's example感兴趣。