在CPageDoc类中,定义了一个public:int m_nKey;在别一个类CPageDlg中这样取CPageDoc类中的数据;
void CPageDlg::OnButtonSeed() 
{
// TODO: Add your control notification handler code here
CPageDoc doc;
         doc.m_nKey;}编译产生这样的错误:
'CPageDoc::CPageDoc' : cannot access protected member declared in class 'CPageDoc'请问怎样解决?

解决方案 »

  1.   

    你声明为protect了,不是public的。检查一下代码
      

  2.   

    呵呵,写错关键字了,protected
      

  3.   

    see declaration of 'CPageDoc::CPageDoc'
    :
    class CPageDoc : public CDocument
    {
    protected: // create from serialization only
    CPageDoc();
    DECLARE_DYNCREATE(CPageDoc)
    它说的是这里为protected,但这个虚构函数不是我设的,要怎么改;或者说有什么命令可以直接读数据出来,像在CPageView类中,是可以这样的: CPageDoc* pDoc = GetDocument();
    但GetDocument()在CPageDlg类中却不能用,在CPageDlg类要用什么命令?
      

  4.   

    1、可以自己手动改的。
    2、这样的设计实际上是为了避免在外部直接建立CPageDoc对象。一般来说可以重载operator new,把它设计为CPageDoc的友元,然后用new来建立CPageDoc类的实例。
      

  5.   

    在CPageView类中,是可以这样的: CPageDoc* pDoc = GetDocument();
    难道在CPageDlg类中没有类似的命令吗?
      

  6.   

    没有。View类中有一个指针,保留了与之关联的Doc对象的指针,GetDocument则是返回这个指针。
    Dialog并不属于Doc/View框架,无从谈起“与之关联的Doc对象”,所以GetDocument对Dialog类没有意义。ps,你可以自己模拟CView类的这个做法。
      

  7.   

    对话框类中设定一个成员指针,类型为CPageDoc*;
    对话框构造的时候,把Doc对象指针传给这个成员指针即可