Ich versuche, Karte der Karten mit C++ 11 zu initialisieren. Mein Compiler ist VS 2013 Express.Initialisierung der Karte von Karten mit Initialisiererliste in 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
};
Es ist kompilieren, aber ich bekomme Haltepunkt in ntdll.dll. Jedoch vereinfachte Version dieses Codes:
unordered_map<EnumType, unordered_map<string, string>> substitutions = {
{
Record::BasementType,
{
{ "0", "" },
{ "1", "Slab or pier" },
{ "2", "Crawl" }
}
},
// *nothing more*
};
funktioniert ordnungsgemäß.
Warum funktioniert das nicht, wenn ich mehr als ein Paar in der Karte habe? Wie geht es besser?
"Ich bekomme Haltepunkt in ntdll.dll" ist zu vage. Gibt es eine Behauptung? Wenn ja, was sagt die Behauptung? – thelamb
Aber es sieht so aus, ich bekomme Haltepunkt, der auf Ende der Initialisierungsliste zeigt, und dahinter gibt es nur Demontage. Im Debug-Modus ist es das gleiche, aber ich bekomme stacktrace durch std :: pair, std :: map, (disassembly), std :: _ Tree einige Male und es endet in der Datei xtree Zeile 327: _DEBUG_ERROR ("map/set iterators unvereinbar"); – omikron
Ok, ich fürchte, ich kann im Moment nicht mehr helfen. Wenn ich später Zeit habe. Was Sie tun können, verwenden Sie einen Online-Compiler, um zu sehen, ob der Code dort läuft (z. B. mit G ++ oder Clang ++). Wenn ja, könnte es ein VS2013 Bug sein. Wenn ich mir den Code anschaue, sehe ich nicht, was falsch ist. – thelamb