【发布时间】:2009-07-27 13:30:32
【问题描述】:
我已经创建了一个只显示消息的窗口类,并且我正在尝试将 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;
但是当我尝试添加到地图时,程序崩溃了。我尝试了三种不同的形式,它们都给出了相同的错误:
...
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++ 新手。
【问题讨论】:
-
你能把代码贴在你调用插入的地方吗?前面还有几行?
-
从你的代码来看,地图没有被声明为静态的。
-
@Neil:好点子。它在原版中 - 已修复。