2014-06-30 146 views
1

我有以下几点:朋友的成员函数不能访问私有成员

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公众和代码编译现在。不过,我仍然收到一个智能感知错误。这是智能感知问题吗?

回答

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&); 
           ^

为了解决这个问题,简单地声明BA朋友:

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

您可能会感兴趣Microsoft's example

+4

来自C++ 11标准的确切引用(如果您想添加它)在11.3/9中:*由朋友声明提名的名称应在包含朋友声明的类的范围内可访问。 –

+0

谢谢!我把'AFunc'改成了public(我真的在公开我的真实代码)。现在编译代码,但我仍然收到一个IntelliSense错误。也许这是IntellSense的问题?更新的问题。 –

+0

代码编译,即使在' - pedantic'模式。我会说智能感知正在喷涌NonSense。 – thirtythreeforty