Как инициализировать `std :: map`использование инициализации списка? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть карта со значением string и значением struct , я не знаю, почему не могу создать экземпляр объекта, используя список инициализаторов :

#include <string>
#include <map>    
using namespace std;

struct CodeInfo
{
    int _level = 0;
    bool _reactive;
};
typedef map<string, CodeInfo> CodeInfos; // Key is code name

int main()
{
    CodeInfos codes = { {"BARECODE", { 0, true }}, {"BARECODE2", { 0, false }} };

    return 0;
}

Это кажется прямым, но я не могу понять, почему я получаю следующую ошибку:

In function 'int main()':    
24:80: error: could not convert '{{"BARECODE", {0, true}}, {"BARECODE2", {0, false}}}' from '<brace-enclosed initializer list>' to 'CodeInfos {aka std::map<std::basic_string<char>, CodeInfo>}'

Я использую компилятор g ++ (GCC) 4.9.1 20140922(Red Hat 4.9.1-10) с C ++ 11.

1 Ответ

0 голосов
/ 10 декабря 2018

Причина в том, что CodeInfo не является агрегированным, поскольку вы инициализируете один из элементов данных (_level = 0) непосредственно в определении класса.

Удаление значения по умолчанию инициализация этого члена будет работать с C ++ 11. См. Здесь

Прочтите этот пост для получения дополнительной информации об агрегатах: Что такое агрегаты и POD и как / почему они особенные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...