我有以下内容:
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感兴趣。