2013-03-17 6 views
1

В принципе, у меня есть карта как переменная-член в классе, которую я бы хотел инициализировать с помощью пар ключ-значение в разделе инициализации базового члена.Как инициализировать std :: map в разделе инициализации базового члена в C++?

Parser::Parser() 
    :operations() //the dictionary 
{ 

} 

Я не совсем уверен, что такое синтаксис для этого. Я думал что-то вроде:

Parser::Parser() 
    :operations({"hello","goodbye"},{"foo","bar"}) 
{ 

} 

но это не работает.

Любые идеи?

ответ

1

Вы пропускаете список инициализатора:

Parser::Parser() 
    :operations({{"hello","goodbye"},{"foo","bar"}}) 
{ 

} 

Это должно работать, а также:

Parser::Parser() 
    :operations{{"hello","goodbye"},{"foo","bar"}} 
{ 

} 

here Demo.

Редактировать: это альтернатива, которая должна работать в VS:

struct a { 
    std::map<int, int> x; 

    static std::map<int, int> make_map() { 
     std::map<int, int> some_map = {{1,2}, {3,4}}; 
     return some_map; 
    } 

    a() : x(make_map()) {} 
}; 
+0

это не нравится ни один из них. Он продолжает говорить «;» Ожидаемый – thed0ctor

+0

Используете ли вы C++ 11? Я добавил демо к моему ответу. – mfontanini

+0

Да, я использую C++ 11 в Visual Studio 2012. Этот сайт опрятен! Никогда этого не видел. Но да, я не уверен, в чем проблема. Я вставил именно то, что вы вложили в свою демонстрационную версию, в пустой проект C++, и у него было такое же отсутствие ';' ошибка. – thed0ctor