如何初始化静态std :: map?

Sim*_*mon 3 c++ dll stl stdmap

我已经创建了一个仅消息窗口类,我正在尝试将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;

    ...
};
Run Code Online (Sandbox Code Playgroud)

MyClass.cpp:

std::map<HWND, CMyClass*> CMyClass::s_mapHandles;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试添加到地图时,程序崩溃了.我尝试了三种不同的形式,它们都给出了同样的错误:

...
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));
Run Code Online (Sandbox Code Playgroud)

要么

...
s_mapHandles.insert(s_mapHandles.end(), pair<HWND, CMyClass*>(m_hWnd, this));
Run Code Online (Sandbox Code Playgroud)

甚至

...
s_mapHandles[m_hWnd] = this;
Run Code Online (Sandbox Code Playgroud)

在每种情况下,_Root()尝试返回的调用都会发生崩溃_Parent(_Myhead); _Parent(_Myhead)返回(_Nodepref)(*_Myhead)._Parent失败,因为_Myhead为null.

如何初始化地图,使其头部非空,我可以在不崩溃的情况下插入内容?如果我解释得很糟糕,我会道歉 - 我是C++的新手.

dal*_*lle 6

您是从另一个静态初始化对象的构造函数中使用它吗?

阅读C++ FAQ Lite - 10.12 什么是"静态初始化命令惨败"?