WindRiver Workbench 3.3 中具有数据类型的枚举
Enum with datatype in WindRiver Workbench 3.3
在 Visual Studio 2010 年,我能够很好地构建具有数据类型的枚举。
enum FRUIT_E : UINT16
{
APPLE = 0,
LEMON = 1,
GRAPE = 2,
};
但是,当我尝试在 WR Workbench 中编译时,出现以下错误:
: error: use of enum 'FRUIT_E' without previous declaration
我确实需要指定枚举的数据类型,因为字段是按位打包的。有什么办法可以显式指定枚举类型吗?
您的问题的简短答案是否定的。
为枚举定义基类型的能力是一种语言特性,直到 C++11 (http://en.cppreference.com/w/cpp/language/enum). Unfortunately, WindRiver has been slow to support compilers that comply with modern C++ standards (). There is mention of support for C++11 in commercial versions of g++ for VxWorks 7.0+ () 才被添加。但是,您的 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 的别名。所以,这远非理想。我已经为你的问题添加了标签。可能有更好的解决方法,可以更紧密地模拟所需的行为。但是,添加新的语言功能似乎表明现有方法是不够的。
在 Visual Studio 2010 年,我能够很好地构建具有数据类型的枚举。
enum FRUIT_E : UINT16
{
APPLE = 0,
LEMON = 1,
GRAPE = 2,
};
但是,当我尝试在 WR Workbench 中编译时,出现以下错误:
: error: use of enum 'FRUIT_E' without previous declaration
我确实需要指定枚举的数据类型,因为字段是按位打包的。有什么办法可以显式指定枚举类型吗?
您的问题的简短答案是否定的。
为枚举定义基类型的能力是一种语言特性,直到 C++11 (http://en.cppreference.com/w/cpp/language/enum). Unfortunately, WindRiver has been slow to support compilers that comply with modern C++ standards (
在你的情况下,我可能会拼凑出一个解决方法,例如:
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 的别名。所以,这远非理想。我已经为你的问题添加了标签。可能有更好的解决方法,可以更紧密地模拟所需的行为。但是,添加新的语言功能似乎表明现有方法是不够的。