c++ - 如何初始化静态 std::map?

标签 c++ dll stl stdmap

我创建了一个仅消息窗口类,并且我正在尝试将 HWND 映射回具有这些句柄的对象。我正在尝试使用私有(private)静态 std::map<HWND, CMyClass*> 来做到这一点属于类,像这样:

我的类.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;

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

...
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为空。

如何初始化 map ,使其头部不为空,并且我可以在不崩溃的情况下插入内容?如果我对此解释得很糟糕,我深表歉意 - 我是 C++ 的新手。

最佳答案

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

阅读 C++ FAQ Lite - 10.12 What's the "static initialization order fiasco"?

关于c++ - 如何初始化静态 std::map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1188168/

相关文章:

c++ - 为什么 std::queue 在使用 swap() 时不释放内存?

delphi - 调用 Delphi DLL 会使 VB6 exe 崩溃,错误代码为 "Run-time error ' -2147418113 (8000ffff )' Method ' ~' of object ' ~' failed",但仅在某些机器上!

c++ - 在 C++ 中排序不匹配 'operator+'

c++ - 如何基于枚举创建容器

c++ - 如何在 C++ 中创建动态对象列表

c++ - Windows 打印处理器可以强制假脱机数据类型吗

linux - Golang,在Linux中加载Windows DLL

c# - 无法处理 C# COM 对象

c++ - 是否可以打印对象的名称?

c++ - 我需要哪个 SDK 来确保 Visual Studio C++ 2017 中的 Windows 7 兼容性