在WindRiver Workbench 3.3中使用数据类型的枚举

时间:2016-10-12 19:03:11

标签: c++ c++11 vxworks wind-river-workbench

在Visual Studio 2010中,我能够使用数据类型构建枚举。

enum FRUIT_E : UINT16
{
    APPLE = 0,
    LEMON = 1,
    GRAPE = 2,
};

但是,当我尝试在WR Workbench中编译时,出现以下错误:

  

:错误:使用enum' FRUIT_E'没有事先声明

我真的需要指定enum的数据类型,因为字段是bitpacked。有什么办法可以明确指定枚举的类型吗?

1 个答案:

答案 0 :(得分:2)

对你的问题的简短回答是否定的。

为枚举定义基类型的能力是在C ++ 11(http://en.cppreference.com/w/cpp/language/enum)之前未添加的语言功能。不幸的是,WindRiver一直很慢地支持符合现代C ++标准的编译器(C++ 11 in vxworks)。在VxWorks 7.0+(https://stackoverflow.com/a/36311473)的商业版g ++中提到了对C ++ 11的支持。但是,您的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的别名。所以,它远非理想。我已经为你的问题添加了标签。可能会有更好的解决方法,更密切地模仿所需的行为。但是,添加新语言功能似乎表明现有方法不足。