Перечисление с типом данных в WindRiver Workbench 3.3
В Visual Studio 2010 я смог построить перечисление с типом данных просто отлично.
enum FRUIT_E : UINT16
{
APPLE = 0,
LEMON = 1,
GRAPE = 2,
};
Однако, когда я пытался скомпилировать в WR Workbench, я получаю следующую ошибку:
: ошибка: использование enum 'FRUIT_E' без предварительного объявления
Мне действительно нужно указать тип данных enum, поскольку поля упакованы в битовый формат. Есть ли способ, которым я мог бы явно указать тип перечисления?
1 ответ
Краткий ответ на ваш вопрос - нет.
Возможность определения базового типа для перечислений - это языковая функция, которая не была добавлена до C++ 11 ( http://en.cppreference.com/w/cpp/language/enum). К сожалению, WindRiver не спешил поддерживать компиляторы, которые соответствуют современным стандартам C++ ( C++ 11 в vxworks). В коммерческих версиях g ++ для VxWorks 7.0+ упоминается поддержка C++ 11 ( /questions/18221740/c-11-v-vxworks/18221749#18221749). Но ваша версия WorkBench (<4.0) подразумевает, что это вам не поможет.
В вашей ситуации я мог бы объединить обходной путь, такой как этот:
namespace FRUIT_E
{
static const UINT16 APPLE = 0;
static const UINT16 LEMON = 1;
static const UINT16 GRAPE = 2;
}
typedef FRUIT_T UINT16;
...
FRUIT_T fruit = FRUIT_E::APPLE;
Однако это не обеспечит безопасность типов, поскольку FRUIT_T - это просто псевдоним для UINT16. Так что это далеко от идеала. Я добавил теги к вашему вопросу. Там могут быть лучшие обходные пути, более близко подражая желаемому поведению. Но добавление новой языковой функции, казалось бы, указывает на то, что существующие методы были неадекватными.