Я пытаюсь использовать std::hash_map
для определения вложенного объекта. Я использую Visual Studio 2013.
Проблемы начинаются, когда я пытаюсь использовать вложенные литералы инициализации. Я сократил свой подход к следующему:
enum ENUM1 {
ENUM1_A,
ENUM1_B,
};
enum ENUM2 {
ENUM2_A,
ENUM2_B
};
enum ENUM3 {
ENUM3_A,
ENUM3_B
};
std::hash_map<ENUM1, std::hash_map<ENUM2, std::hash_map<ENUM3, int>>> A = {
{
ENUM1_A, {
{
ENUM2_A, {
{ ENUM3_A, 123 },
{ ENUM3_B, 45 },
},
},
{
ENUM2_B, {
{ ENUM3_A, 733 },
{ ENUM3_B, 413 },
}
}
}
}
};
Компилятор не жалуется, но при выполнении выдает нарушение прав доступа и следующий стек вызовов:
***.exe!std::list<std::pair<enum ENUM3 const ,int>,std::allocator<std::pair<enum ENUM3 const ,int> > >::clear() Line 1503 C++
***.exe!std::list<std::pair<enum ENUM3 const ,int>,std::allocator<std::pair<enum ENUM3 const ,int> > >::_Tidy() Line 1884 C++
***.exe!std::list<std::pair<enum ENUM3 const ,int>,std::allocator<std::pair<enum ENUM3 const ,int> > >::~list<std::pair<enum ENUM3 const ,int>,std::allocator<std::pair<enum ENUM3 const ,int> > >() Line 1096 C++
***.exe!std::_Hash<stdext::_Hmap_traits<enum ENUM3,int,stdext::hash_compare<enum ENUM3,std::less<enum ENUM3> >,std::allocator<std::pair<enum ENUM3 const ,int> >,0> >::~_Hash<stdext::_Hmap_traits<enum ENUM3,int,stdext::hash_compare<enum ENUM3,std::less<enum ENUM3> >,std::allocator<std::pair<enum ENUM3 const ,int> >,0> >() Line 409 C++
***.exe!stdext::hash_map<enum ENUM3,int,stdext::hash_compare<enum ENUM3,std::less<enum ENUM3> >,std::allocator<std::pair<enum ENUM3 const ,int> > >::~hash_map<enum ENUM3,int,stdext::hash_compare<enum ENUM3,std::less<enum ENUM3> >,std::allocator<std::pair<enum ENUM3 const ,int> > >() C++
***.exe!std::pair<enum ENUM2 const ,stdext::hash_map<enum ENUM3,int,stdext::hash_compare<enum ENUM3,std::less<enum ENUM3> >,std::allocator<std::pair<enum ENUM3 const ,int> > > >::~pair<enum ENUM2 const ,stdext::hash_map<enum ENUM3,int,stdext::hash_compare<enum ENUM3,std::less<enum ENUM3> >,std::allocator<std::pair<enum ENUM3 const ,int> > > >() C++
***.exe!`dynamic initializer for 'A''() Line 76 C++
К сожалению, я очень новичок в C++ и сам не знаю, что с этим делать.
Я видел следующий вопрос, где ответ ссылается на ошибку компилятора, но в связанном отчете об ошибке конкретно упоминается, что эта проблема связана со строковыми литералами.
Что я делаю не так? Несколько не связанный, что мешает вычислить объект с таким постоянным значением во время компиляции? Есть ли лучший способ определить JSON-подобные объекты в коде?