我已经创建了一个仅消息窗口类,并且正在尝试将 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;
...
};
我的类.cpp:
std::map<HWND, CMyClass*> CMyClass::s_mapHandles;
但是当我尝试添加到地图时,程序崩溃了。我尝试了三种不同的形式,它们都给出了相同的错误:
...
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)
;_Parent(_Myhead)
返回(_Nodepref)(*_Myhead)._Parent
失败,因为_Myhead
它是空的。
如何初始化地图,使其头部不为空,并且我可以插入东西而不会崩溃?抱歉,如果我解释得不好 - 我是 C++ 新手。