我已经将从结构外部声明的枚举类型的变量数据复制到了内部结构中写入的枚举类型变量,但是由于转换为枚举类型需要显式强制转换(static_cast,C样式强制转换),因此抛出构建错误或函数式演员)
enum TGenObjType //sundar
{
TYPE_UNDEFINED
, TYPE_CAR
, TYPE_TRUCK
, TYPE_MOTORBIKE
, TYPE_BIKE
, TYPE_PEDESTRIAN
};
struct SGenObjData
{
enum TGenObjType recogType ; /* #RTAS: input */ /* Object type (vehicle, pedestrian, ...) */
enum TGenObjType commuType ; /* #RTAS: input */ /* Object type (vehicle, pedestrian, ...) */
};
ushort j(0);
for (ulong i = 0; i < gol.mData.size(); ++i)
{
if (gol.mData[i].isValid > 0)
{
if (gol.mData[i].id <= OBJ_MAX_ID)
{
objectList.objectIdx[size_t(gol.mData[i].id)][size_t(SRC_LIST1)] = ushort(j);
switch (gol.mData[i].recognized_shape)
{
case EO_SHAPE_CAR : objectList.objects[j].recogType = TYPE_CAR ; break;
case EO_SHAPE_TRUCK : objectList.objects[j].recogType = TYPE_TRUCK ; break;
case EO_SHAPE_MOTORBIKE : objectList.objects[j].recogType = TYPE_MOTORBIKE ; break;
case EO_SHAPE_BIKE : objectList.objects[j].recogType = TYPE_BIKE ; break;
case EO_SHAPE_PEDESTRIAN: objectList.objects[j].recogType = TYPE_PEDESTRIAN; break;
case EO_SHAPE_UNDEFINED :
default : myDataLst.objectList.objects[j].recogType = TYPE_UNDEFINED ;
}// throwing an error Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
谁能告诉我出了什么问题?
答案 0 :(得分:2)
命名enum
是一种不同的类型。它有一个底层类型和一个“弱”enum
允许隐式转换到底层类型。它不支持从基础类型到enum
的隐式转换。声明与另一个enum
具有相同名称但在不同scopr中的enum
是其自身的不同类型(这适用于所有类型)。由于enum
不支持从基础类型隐式转换,因此您无法简单地将一个enum
的值分配给另一个,即使enum
和他们所有的成员都有相同的名字和价值观。
enum Foo
{
Bar = 0
};
与
不同struct Object
{
enum Foo
{
Bar = 0
};
};
Foo
和Object::Foo
都是不同的类型,C ++不允许在它们之间进行隐式转换。
Object:Foo innerFoo = Bar; // Error Bar and Object::Bar are not the same
Object:Foo innerFoo = Onject::Bar; // OK! They are the same!
听起来两个enum
是多余的,因此您需要决定要使用哪个版本的TGenObjType
并删除另一个版本。