あなたはこれが面白いと思うかもしれません:-
コードをクリーンアップして再配置する場合は、MFC 派生クラス ヘッダー ファイルに存在する DECLARE_MESSAGE_MAP() マクロに注意してください。このマクロには、「保護された」ストレージ クラス宣言が含まれています。したがって、このマクロの下にあるものはすべて、その後に指定された他のストレージ クラスがない限り保護されます。コンパイル時に発生する通常のエラーは、private 変数にアクセスできません。しかし、上のマクロ呼び出しとパブリック ストレージ クラスしか確認できないため、何が問題なのかを簡単に特定することはできません。
#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
解決策は、保護されたストレージ クラス内に残すことです。つまり、保護されたストレージ クラスをそのすぐ上で宣言し、保護する必要がある関数と変数をその下で宣言します。ストレージ クラスを適切に宣言して、パブリック関数と変数を保護セクションの上に配置します。