我有类似的东西:
//file1.h
class Base {
private:
static std::unordered_map<int, std::unordered_map<int, std::string>> table;
}
为了使一切正常工作,我写了这篇文章:
//file1.cpp
std::unordered_map<int, std::unordered_map<int, std::string>> Base::table = {
{
1, std::unordered_map<int, std::string> {
{12, "asset:12/"},
{-3, "asset:24/"},
//...
}
},
//...
};
我使用Visual Studio 2017最新更新(15.8.5)并且此代码失败:
//file1.h
class Base {
private:
inline static std::unordered_map<int, std::unordered_map<int, std::string>> table = {
{
1, std::unordered_map<int, std::string> {
{12, "asset:12/"},
{-3, "asset:24/"},
//...
}
},
//...
};
为什么此内联声明失败?我已经看到,自C++17
起,您可以使用内联静态声明。问题出在列表标题中,它指出:
**_Pnode** was 0xDDDDDDDD.
地图有问题吗?我已经在coliru中运行了代码,但是没有在VS中发现的问题。屏幕:
输出对话框是:
线程0x3790已退出,代码为0(0x0)。引发异常:读取 访问冲突。 _Pnode 为0xDDDDDDDD。
退出代码为0,但我不知道可能发生访问冲突。