メッセージ専用のウィンドウクラスを作成しました。これらのハンドルを持つオブジェクトにHWNDをマップし直そうとしています。静的なstd :: mapを初期化するにはどうすればよいですか?
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*>
を使用していることを私がやろうとしている
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;
を、そこにクラッシュがコールで発生します_Parent(_Myhead)
を返そうとする_Root()
に; _Parent(_Myhead)
は、_Myhead
がヌルであるために失敗する(_Nodepref)(*_Myhead)._Parent
を返します。
地図を初期化するにはどのようにすればいいですか?ヘッドがnullでなく、クラッシュすることなく挿入できますか?私がこれをひどく説明してくれれば謝ります - 私はC++を初めて使っています。
挿入を呼び出す場所にコードを投稿できますか?それ以前の行も? –
あなたのコードからは、地図は静的ではありません。 –
@Neil:良い点。それは元の - 固定されています。 – Simon