在 Visual Studio 2010 中,我能够很好地使用数据类型构建枚举。
enum FRUIT_E : UINT16
{
APPLE = 0,
LEMON = 1,
GRAPE = 2,
};
但是,当我尝试在 WR Workbench 中编译时,出现以下错误:
: 错误: 使用枚举'FRUIT_E' 没有事先声明
我真的需要指定枚举的数据类型,因为字段是位压缩的。有什么方法可以明确指定枚举的类型吗?
在 Visual Studio 2010 中,我能够很好地使用数据类型构建枚举。
enum FRUIT_E : UINT16
{
APPLE = 0,
LEMON = 1,
GRAPE = 2,
};
但是,当我尝试在 WR Workbench 中编译时,出现以下错误:
: 错误: 使用枚举'FRUIT_E' 没有事先声明
我真的需要指定枚举的数据类型,因为字段是位压缩的。有什么方法可以明确指定枚举的类型吗?
您的问题的简短回答是否定的。
为枚举定义基本类型的能力是直到 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 的别名。因此,它远非理想。我已在您的问题中添加了标签。可能有更好的解决方法,更接近地模拟所需的行为。但是,添加新的语言功能似乎表明现有方法是不够的。