メッセージのみのウィンドウ クラスを作成し、これらのハンドルを持つオブジェクトに HWND をマップしようとしています。std::map<HWND, CMyClass*>
次のように、クラスに属するプライベート静的を使用してそれを実行しようとしています:
MyClass.h:
class CMyClass
{
...
private:
HWND m_hWnd;
HINSTANCE m_hInstance;
LPCSTR m_szClassName;
static std::map<HWND, CMyClass*> s_mapHandles;
...
};
MyClass.cpp:
std::map<HWND, CMyClass*> CMyClass::s_mapHandles;
しかし、マップに追加しようとすると、プログラムがクラッシュします。3 つの異なるフォームを試しましたが、すべて同じエラーが発生します。
...
m_hWnd = ::CreateWindowEx(0, m_szClassName, "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0);
s_mapHandles.insert(pair<HWND, CMyClass*>(m_hWnd, this));
また
...
s_mapHandles.insert(s_mapHandles.end(), pair<HWND, CMyClass*>(m_hWnd, this));
あるいは
...
s_mapHandles[m_hWnd] = this;
いずれの場合も、_Root()
を戻そうとする呼び出しでクラッシュが発生し_Parent(_Myhead)
ます。がnullであるために失敗したものを_Parent(_Myhead)
返します。(_Nodepref)(*_Myhead)._Parent
_Myhead
マップのヘッドが null ではなく、クラッシュすることなく挿入できるように、マップを初期化するにはどうすればよいですか? これをひどく説明した場合はお詫び申し上げます-私はC ++を初めて使用します。