簡體   English   中英

轉換為枚舉類型需要顯式強制轉換(static_cast,C樣式強制轉換或函數樣式強制轉換)枚舉

[英]Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast) enum

我已經將變量數據從在結構外部聲明的枚舉類型復制到在結構內部寫入的枚舉類型變量,但由於引發向枚舉類型的轉換需要顯式強制轉換(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)

誰能告訴我哪里出了問題?

命名enum是一種獨特的類型。 它具有基礎類型,“弱” enum允許隱式轉換基礎類型。 它不支持從基礎類型到enum隱式轉換。 與另一個enum聲明相同名稱但在另一個scopr中聲明的enum是其自身的獨特類型(這適用於所有類型)。 由於enum不支持基礎類型隱式轉換,因此即使enum及其所有成員具有相同的名稱和值,也不能簡單地將一個enum的值分配給另一個enum

enum Foo
{
    Bar = 0
};

與...不同

struct Object
{
    enum Foo
    {
        Bar = 0
    };
};

FooObject::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版本,並刪除另一個版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM