我想用C++ 11初始化映射圖。我的編譯器是VS 2013 Express。在VS 2013中用初始值設定項列表初始化映射圖
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中的斷點」太含糊。有沒有斷言?如果是的話,這個說法是什麼意思。 – thelamb
但它看起來像這樣,我得到斷點指向初始化列表的結束,並且在那裏只有反彙編。在調試模式下它是相同的,但我通過std :: pair,std :: map,(disassembly),std :: _ Tree進行堆棧跟蹤並且它結束於文件xtree行327:_DEBUG_ERROR(「map/set iterators不相容」); – omikron
好了,那麼恐怕我現在不能再幫忙了。如果我有時間以後。你可以使用一些在線編譯器來查看代碼是否在那裏運行(例如使用G ++或Clang ++)。如果是這樣,它可能是一個VS2013的錯誤。只要看看代碼,我就不會看到有什麼問題。 – thelamb