另外,在VC环境自动生成SDI的代码中,为什么CC20010731Doc()要放在受保护的部分,而不放在公共部分,谢谢。

解决方案 »

  1.   

    因为MFC不希望你new一个CC20010731Doc对象:
    CC20010731Doc* pDoc = new CC20010731Doc;
    他是在mfc内部通过CreateObject生成的。
      

  2.   

    你的程序不对吧!不可能是这样的,我试过了
    除非这个程序不是你编的,别人已经在doc申明中用了
    friend class XXXXX了!你仔细看看!
      

  3.   

    c_z_y你好,我是用wizard生成的MFC程序,工程名为c20010731,除了上面的改动外什么都没动,真的可以运行。谢谢关注。
      

  4.   

    注意!
    DECLARE_DYNCREATE(CC20010731Doc)
    char * m_Message;  //    <--
    查看定义:
    #define DECLARE_DYNAMIC(class_name) protected:  static CRuntimeClass* PASCAL _GetBaseClass(); public:  static const AFX_DATA CRuntimeClass class##class_name;  virtual CRuntimeClass* GetRuntimeClass() const; 
    #define DECLARE_DYNCREATE(class_name)  DECLARE_DYNAMIC(class_name)  static CObject* PASCAL CreateObject();知道怎么回事了吗?DECLARE_DYNCREATE宏在定义时加入了一个public节,因此m_Message实际上是共有变量。
      

  5.   

    哈!原来如比啊!~~~~~~~~~~~~~~hahahahhaha
    其实看看左边的class tree上的变量的图标,就应该看出来是public还是protected了
      

  6.   

    to: llshore() 
    这里的“PASCAL ”指得是什么?