2015-01-11 5 views
4

Я пытаюсь сделать конструктор класса, который будет принимать список инициализации и инициализировать карту с ним, как это:Построение зОго :: Карты из initializer_list ошибки

class Test { 
    std::map<int, int> m_ints; 
public: 
    Test(std::initializer_list<std::pair<int, int>> init): 
     m_ints(init) 
    {} 
}; 

Но это приводит к очень долго сообщение об ошибке, которое я откровенно не понимаю. Что мне нужно изменить, чтобы сделать эту работу?

+0

Убедитесь, что вы используете C++ 11 – smac89

ответ

9

Объявляет шаблона аргумент std::initializer_list как имеющий тип std::pair<const int, int>

Вот показательной программы

#include <iostream> 
#include <map> 
#include <initializer_list> 

class Test { 
    std::map<int, int> m_ints; 
public: 
    Test(std::initializer_list<std::pair<const int, int>> init): 
     m_ints(init) 
    {} 
}; 

int main() 
{ 
    Test t = { { 1, 2 }, { 2, 3 } }; 

    return 0; 
} 

Соответствующий конструктор объявлен следующим образом

map(initializer_list<value_type>, 
    const Compare& = Compare(), 
    const Allocator& = Allocator()); 

и value_type определен подобные

typedef pair<const Key, T> value_type; 

Таким образом, можно определить конструктор вашего класса также следующим образом

Test(std::initializer_list<std::map<int, int>::value_type> init) : 
     m_ints(init) 
{} 
Смежные вопросы