заполнение карты по всему миру - PullRequest
0 голосов
/ 02 июня 2011

Я объявил следующую карту глобально и пытаюсь заполнить глобально.

   1: typedef std::map<unsigned short,std::pair<char,std::string>> DeviceTypeList;
   2: DeviceTypeList g_DeviceTypeList;
   3: g_DeviceTypeList.insert( std::make_pair ((unsigned short)SINGLE_CELL_CAMERA,
   std::make_pair('B',"Single Cell Camera")));

она показывает ошибку, такую ​​как ошибка C2143: синтаксическая ошибка: отсутствует ';'до '.' в строке 2.

1 Я делаю что-то не так
2. почему мы не можем инициализировать карту глобально.

Ответы [ 2 ]

4 голосов
/ 02 июня 2011

Компилятор, вероятно, смущен >> в строке 1 (потому что он выглядит как оператор сдвига) Попробуйте вставить туда пробел:

typedef std::map<unsigned short,std::pair<char,std::string> > DeviceTypeList;

[обновление]

См. Комментарий Влада Лазаренко, почему это не решит вашу проблему. Самый простой способ - обернуть это устройство в объект, инициализировать его в конструкторе, а затем объявить в глобальном контексте. (Но нет, если вы можете избежать этого, поскольку глобалы - это зло в первую очередь ...)

2 голосов
/ 02 июня 2011

В глобальной области видимости могут быть только объявления и определения, и вызов map :: insert () не является одним из них.

Поскольку вы используете >> в шаблонах, ваш компилятор должен быть достаточно новым для поддержки C ++ 0x.

Попробуйте синтаксис инициализатора C ++ 0x, затем:

typedef std::map<unsigned short, std::pair<char,std::string>> DeviceTypeList;
DeviceTypeList g_DeviceTypeList = {
              {(unsigned short)SINGLE_CELL_CAMERA, {'B',"Single Cell Camera"}}
           };

тест: https://ideone.com/t4MAZ

Хотя диагностика предполагает, что это MSVS, которая не имеет инициализаторов C ++ 0x по состоянию на 2010 год, поэтому попробуйте вместо этого использовать синтаксис boost инициализатора:

typedef std::map<unsigned short, std::pair<char,std::string> > DeviceTypeList;
DeviceTypeList g_DeviceTypeList =
           boost::assign::map_list_of((unsigned short)SINGLE_CELL_CAMERA,
                                       std::make_pair('B',"Single Cell Camera"));

тест: https://ideone.com/KB0vV

...