你可能会觉得这很有趣:-
如果您决定清理和重新安排您的代码,最好小心将出现在 MFC 派生类头文件中的 DECLARE_MESSAGE_MAP() 宏。这个宏包含一个“受保护的”存储类声明。因此,除非在此之后指定了任何其他存储类,否则该宏下的所有内容都将受到保护。编译期间发生的正常错误将是无法访问私有变量。但是你不能轻易弄清楚出了什么问题,你只能看到上面的一个宏调用和一个公共存储类。
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \
virtual const AFX_MSGMAP* GetMessageMap() const; \
#else
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
virtual const AFX_MSGMAP* GetMessageMap() const; \
#endif
解决方案是将其留在受保护的存储类中。即,在其上方声明一个受保护的存储类,并在其下方声明需要保护的函数和变量。让公共函数和变量位于受保护部分之上,并正确声明存储类。