Перечисление с типом данных в 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. Так что это далеко от идеала. Я добавил теги к вашему вопросу. Там могут быть лучшие обходные пути, более близко подражая желаемому поведению. Но добавление новой языковой функции, казалось бы, указывает на то, что существующие методы были неадекватными.

Другие вопросы по тегам