1

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

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

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

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

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

4

1 回答 1

2

您的问题的简短回答是否定的。

为枚举定义基本类型的能力是直到 C++11 ( http://en.cppreference.com/w/cpp/language/enum ) 才添加的语言特性。不幸的是,WindRiver 在支持符合现代 C++ 标准(vxworks 中的 C++ 11)的编译器方面进展缓慢。在 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 的别名。因此,它远非理想。我已在您的问题中添加了标签。可能有更好的解决方法,更接近地模拟所需的行为。但是,添加新的语言功能似乎表明现有方法是不够的。

于 2016-10-16T02:03:26.070 回答