class CDirectory : public CObject
{
DECLARE_SERIAL(CDirectory)       //有了这句话后
CDirectory();                    //这个构造函数还是私有的吗?
virtual ~CDirectory();public:
virtual void Serialize(CArchive&);
CDirectory (const CDirectory &dir);
CDirectory &operator=(const CDirectory &dir); CString m_strDir;
CString m_strAlias;
BOOL m_bAllowDownload;
BOOL m_bAllowUpload;
BOOL m_bAllowRename;
BOOL m_bAllowDelete;
BOOL m_bAllowCreateDirectory;
BOOL m_bIsHomeDir; 
};//为什么下面这句话还能编译成功?它的构造构造函数不是private的吗?
CDirectory directory;

解决方案 »

  1.   

    #ifdef _AFXDLL
    #define DECLARE_DYNAMIC(class_name) \
    public: \
    static const CRuntimeClass class##class_name; \
    static CRuntimeClass* PASCAL GetThisClass(); \
    virtual CRuntimeClass* GetRuntimeClass() const; \#define _DECLARE_DYNAMIC(class_name) \
    public: \
    static CRuntimeClass class##class_name; \
    static CRuntimeClass* PASCAL GetThisClass(); \
    virtual CRuntimeClass* GetRuntimeClass() const; \#else
    #define DECLARE_DYNAMIC(class_name) \
    public: \
    static const CRuntimeClass class##class_name; \
    virtual CRuntimeClass* GetRuntimeClass() const; \#define _DECLARE_DYNAMIC(class_name) \
    public: \
    static CRuntimeClass class##class_name; \
    virtual CRuntimeClass* GetRuntimeClass() const; \#endif// not serializable, but dynamically constructable
    #define DECLARE_DYNCREATE(class_name) \
    DECLARE_DYNAMIC(class_name) \
    static CObject* PASCAL CreateObject();#define _DECLARE_DYNCREATE(class_name) \
    _DECLARE_DYNAMIC(class_name) \
    static CObject* PASCAL CreateObject();#define DECLARE_SERIAL(class_name) \
    _DECLARE_DYNCREATE(class_name) \
    AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);看明白了么?
      

  2.   

    DECLARE_SERIAL实际上已经为你加了public了。
      

  3.   

    这些宏在afx.h中定义,有空可能打开看看。
      

  4.   

    对,宏作的就是替换,构造函数已经变为 public的,所以 “CDirectory directory;”能被编译
      

  5.   

    没错,就是楼上门说的,注意了解MFC的实现方式!
      

  6.   

    我也刚看了"深入浅出MFC",就是这样的!