Sto provando a inizializzare la mappa delle mappe utilizzando C++ 11. Il mio compilatore è VS 2013 Express.Inizializzazione della mappa delle mappe con l'elenco di inizializzazione 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
};
È compilato ma sto ricevendo il punto di interruzione all'interno di ntdll.dll. Versione semplificata di questo codice:
unordered_map<EnumType, unordered_map<string, string>> substitutions = {
{
Record::BasementType,
{
{ "0", "" },
{ "1", "Slab or pier" },
{ "2", "Crawl" }
}
},
// *nothing more*
};
funziona correttamente.
Perché questo non funziona quando ho più di una coppia nella mappa? Come si fa meglio?
"I'm getting breakpoint inside ntdll.dll" è troppo vago. C'è un'affermazione? Se è così, cosa dice l'affermazione. – thelamb
Ma sembra così, sto ricevendo il punto di interruzione che punta alla fine della lista di inizializzazione e dietro c'è solo il disassemblaggio. In modalità debug è lo stesso, ma sto ricevendo stacktrace tramite std :: pair, std :: map, (disassembly), std :: _ Tree alcune volte e finisce nel file xtree line 327: _DEBUG_ERROR ("map/set iterators incompatibile"); – omikron
Ok, allora temo di non poterne più aiutare al momento. Se avrò tempo dopo. Quello che puoi fare usa un compilatore online per vedere se il codice viene eseguito lì (ad esempio usando G ++ o Clang ++). Se così fosse potrebbe essere un bug VS2013. Solo guardando il codice non vedo cosa c'è che non va. – thelamb