2015-02-06 113 views
1

我在2個具有完全相同的值集的不同模塊中枚舉了2個枚舉。我怎麼能把一個到另一個?如何將一個枚舉值轉換/分配給另一個枚舉

typedef EnumA{ 
a_dog = 0, 
a_cat = 1 
} EnumA; 

typedef EnumB{ 
b_dog = 0, 
b_cat = 1 
} EnumB; 

EnumA a = a_dog; 
EnumB b; 

b = a; 

這樣的分配產生一個警告:與另一種類型混合 能否避免類型轉換開關的情況下,像說

b = (int)a; 

b = (EnumB)a; 
+1

你有沒有嘗試過嗎? – 2015-02-06 13:05:56

+0

如果兩者都具有完全相同的值集合,那麼爲什麼他們都定義了它們呢?只需定義一個並在兩個模塊中使用這一個。 無論如何,將一個枚舉枚舉爲另一個枚舉並不總是一個好主意。它應該工作。 – 2015-02-06 13:08:56

+1

哪個編譯器/工具(使用哪些選項)會導致警告?標準沒有任何要求('gcc -std = c99 -pedantc -Wall -Wextra'不會發出一個)。 – mafso 2015-02-06 13:13:11

回答

3

我從你的問題做了一個工作代碼。您錯過了您的類型定義中的enum

typedef enum EnumA 
{ 
    a_dog = 0, 
    a_cat = 1 
} EnumA; 

typedef enum EnumB 
{ 
    b_dog = 0, 
    b_cat = 1 
} EnumB; 

int main() 
{ 
    EnumA a = a_dog; 
    EnumB b; 

    b = (EnumB) a; 
    printf("%d\n", b); 
    return 0; 
} 

代碼b = a也可以在沒有轉換的情況下正常工作。另外b = (int) a;正在工作 - 至少在C11中,因爲enum實際上只是整數。無論如何,恕我直言,這是一個很好的做法,做一個明確的演員。

+0

b =(EnumB)a;成功了! – Aadishri 2015-02-09 13:44:27

+0

在迅速,我們不能這樣做,你有任何解決方法, – Ballu 2016-11-08 14:55:47

+0

http://stackoverflow.com/questions/25276775/swift-cast-int-into-enumint – meskobalazs 2016-11-08 15:38:16

1

enum枚舉類型類型是整數類型,您可以將任何整數值分配給任何整數對象。

這是有效的,標準不需要診斷。儘管如此,有些實現會在您嘗試混合不同的enum類型時發出警告。

爲了避免警告,最好不要混淆枚舉類型,否則我會建議將它轉換爲枚舉類型。

b = (EnumB)a; 

,除非你的編譯器是很聰明的做法是:

b = (int)a; 

也應努力爲enum常數是int類型和編譯器不應該警告正確enum不變時(類型int )被分配給與右邊關聯的enum類型。