我在2个具有完全相同的值集的模块中有2个枚举。如何将一个 Actor 投给另一个人?

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;

最佳答案

我根据您的问题制作了工作代码。您已经从类型定义中错过了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实际上只是整数。无论如何,恕我直言,做一个明确的类型转换是一个好习惯。

10-06 14:29