Я пытаюсь инициализировать карту карт с помощью 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
Но это похоже на то, что я получаю точку останова, указывающую на конец списка инициализации, и позади есть только разборка. В режиме отладки это одно и то же, но я получаю stacktrace через std :: pair, std :: map, (дизассемблирование), std :: _ Дерево несколько раз и заканчивается в файле xtree line 327: _DEBUG_ERROR ("map/set iterators несовместимый "); – omikron
Хорошо, тогда я боюсь, что больше не могу помочь в данный момент. Если у меня будет время позже. Что вы можете сделать, он использует какой-то онлайн-компилятор, чтобы узнать, работает ли там код (например, с помощью G ++ или Clang ++). Если это так, это может быть ошибка VS2013. Просто взглянув на код, я не вижу, что не так. – thelamb