很诡秘的有关问题

很诡秘的问题
各位前辈我遇到一个问题,想搞清楚是什么问题。请知道的朋友帮忙解答一下。下面有一个程序下载地址,程序很小,可用迅雷下载。谢谢

错误代码是:error C2248: 'm_wndStatusBar' : cannot access protected member declared in class 'CMainFrame'
为什么把CMainFrame底下的变量

protected:  
  CStatusBar m_wndStatusBar;

改为public:
  CStatusBar m_wndStatusBar;

才能运行, 而别人的示范代码文件夹1就可以设置为protected: 呢 ,而文件夹2必须设置为public:才行呢?


注意修改的时候要保证文件夹2和文件夹1的内容一致才行。因为我想搞清楚为什么会出现这样的问题。

程序下载地址:http://xasrc.ctfs.ftn.qq.com/ftn_handler/6f32d584326606306aedf77dc10a4ef1eb88166b5051aa56d3fed67edf733b3f9f59eccd472a7eb0596c520e9e5e629d07c286a01ef732fef3dca3194705b013/%E4%BF%AE%E6%94%B9%E7%A8%8B%E5%BA%8F_72948.rar?k=2464646549b29fcd8e427e581437571d55055c00510e5300485307070a1a51065056490404025d1f075c5301000555060757505c323b65e2bbdca0d6fee7971c170516650f&fr=00&&txf_fid=000000004e0373aaf9084cab98cdb7545f61996e


------解决方案--------------------
你应该是在外部操作CFrameWnd类的m_wndStatusBar对象
------解决方案--------------------
外部有用到,被保护了,共有的就可以
------解决方案--------------------
保护成员变量不允许外界访问的,不能在CMainFrame类的外部通过此类对象或指针访问m_wndStatusBar:
((CMianFrame*)AfxGetMainFrame())->m_wndStatusBar = ..;//不允许
若m_wndStatusBar为公有则可以访问
------解决方案--------------------
不诡秘,正象楼上各位说的都正确.不过,有时候VC的程序,你在一个类文件里加上包括CMianFrame头文件时,编绎时会出错,这时你就得把protected:的变量改为public:的变量才行,应该是编绎的事.
还有的时候,你在其它的文件里包括了CMianFrame头文件时,CDocument类的变量却不识别了,这时,你就得在不识别这个类的变量的文件里再包括CDocument这个头件才行.在VC6时及VS2003时常碰到这种情况.都是在别的类里包含CMianFrame头文件时出现的.现在用VS2010还没发现有这种情况.