2015-05-22 30 views
0

我已將從結構外聲明的枚舉類型的變量數據複製到寫入結構內部的枚舉類型變量但它扔建築誤差轉換爲枚舉類型需要顯式轉換(的static_cast,C樣式轉換或函數樣式轉換)轉換爲枚舉類型需要顯式類型轉換(static_cast,C風格轉換或函數風格轉換)enum

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

評論是不適合擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/78548/discussion-on-question-by-meenakshy-sundaresan-conversion-to-enumeration-type-re)。 – Taryn

回答

2

一個名爲enum是一個不同的類型。它有一個基礎類型和一個「弱」enum允許隱式轉換的基礎類型。它不支持從底層類型到enum的隱式轉換。一個enum聲明與另一個enum相同的名稱,但在不同的scopr是它自己的一個不同的類型(這適用於所有類型)。由於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版本。

+0

所以我想現在要糾正我的代碼中的錯誤? 你能指導我嗎? –

+0

實際上枚舉TGenObjType用於TYPE_CAR 並枚舉TObjType recogtype,它在結構中,因爲您說TGenObjType沒有2次被刪除。 –

+0

我可以給你的唯一附加建議是用相關代碼(最好是[MCVE](http://stackoverflow.com/help/mcve))更新你的問題,以及更多關於你想要完成的內容的上下文不只是代碼)。現在我們不知道你是否需要做一個簡單的轉換,刪除多餘的'enum',或者如果你想做的事情從一開始就有缺陷。 –