我有以下内容:

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更改为public,现在可以编译代码。但是,我仍然收到IntelliSense错误。这是IntelliSense的问题吗?

最佳答案

问题是您正在将另一个类的private函数声明为friend! B通常应该不了解A的私有(private)成员函数。 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的 friend :
class A
{
    friend class B;
private:
    int AFunc(const B& b);
};

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

10-08 01:06