【发布时间】:2013-10-16 15:41:07
【问题描述】:
我正在尝试使用 C++11 初始化地图地图。我的编译器是 VS 2013 Express。
unordered_map<EnumType, unordered_map<string, string>> substitutions = {
{
Record::BasementType,
{
{ "0", "" },
{ "1", "Slab or pier" },
{ "2", "Crawl" }
}
},
{
Record::BuildingStyle,
{
{ "0", "" },
{ "1", "Ranch" },
{ "2", "Raised ranch" }
}
},
// ... and so on
};
它已编译,但我在 ntdll.dll 中遇到断点。但是此代码的简化版本:
unordered_map<EnumType, unordered_map<string, string>> substitutions = {
{
Record::BasementType,
{
{ "0", "" },
{ "1", "Slab or pier" },
{ "2", "Crawl" }
}
},
// *nothing more*
};
正常工作。
为什么当我在地图中有一对以上时这不起作用?如何做得更好?
【问题讨论】:
-
“我在 ntdll.dll 中得到断点”太模糊了。有断言吗?如果是这样,断言说明了什么。
-
但看起来是这样,我得到了指向初始化列表末尾的断点,而后面只有反汇编。在调试模式下它是相同的,但我通过 std::pair、std::map、(反汇编)、std::_Tree 获得堆栈跟踪几次,它最终出现在文件 xtree 第 327 行:_DEBUG_ERROR("map/set iterators不兼容");
-
好吧,那我恐怕现在也帮不上什么忙了。如果以后有时间。您可以使用一些在线编译器来查看代码是否在那里运行(例如,使用 G++ 或 Clang++)。如果是这样,它可能是一个 VS2013 错误。只看代码我看不出有什么问题。
标签: c++ c++11 stl visual-studio-2013