考虑下面的代码:为什么我不能在另一个班级的私人成员的班级中申报朋友?
class Screen;
class WindowMgr
{
WindowMgr& relocateScreen(int r, int c, Screen& s);
};
class Screen
{
friend WindowMgr& WindowMgr::relocateScreen(int r, int c, Screen& s);
//^cannot access private member declared in class 'WindowMgr'
int m_nR,
m_nC;
};
WindowMgr& WindowMgr::relocateScreen(int r, int c, Screen& s)
{
s.m_nR = r;
s.m_nC = c;
return *this;
}
为什么可以Screen
类不声明WindowMgr::relocateScreen
成员函数作为一个朋友? Screen
不想使用这个私人成员函数的另一个类,但只是希望该函数能够访问自己的私人成员。
如果公开relocateScreen
函数仅用于WindowMgr
类,则可能是不好的设计。同样,如果WindowMgr
的私人成员在任何其他情况下无法访问私人成员,则Screen
作为WindowMgr
的朋友可能是不好的设计。
我在哪里错了?什么是正确的方法?我是在自欺欺人吗?
前置声明已经存在。事实上,如果我在WindowMgr中将类Screen作为一个朋友,类Screen的声明将被引入到周围的作用域中,明确地消除了对前向声明的需要。 – James 2010-07-22 09:55:51