2015-03-08 3 views
2

Я пытаюсь статически инициализировать карту, которая содержит пару:статическая инициализация карты с парой

typedef map<int, pair<int, int>> mytype; 
static const mytype mymap = { 3, {3, 0} }; 

Я использую Visual Studio 2013, но я получаю сообщение об ошибке:

error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::map<int,std::pair<int,int>,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' 

Любая идея, что может вызвать это? Я думал, что VS2013 имеет эту функциональность C++ 11.

ответ

11

Вы пропустили один набор брекетов:

static const mytype mymap = { { 3, {3, 0} } }; 
          ^^ ^
          | | pair<int,int> (value) 
          | pair<const key, value> (map element) 
          map<key, value> 
+0

Иллюстрируя это, как это очень полезно, я думаю. –

1

компилятор думает, что вы хотите инициализировать карту с двумя элементами.

Правильный синтаксис будет:

static const mytype mymap = { { 3, {3, 0} } }; 
Смежные вопросы