我在C中有以下代码:
typedef enum
{
MONDAY = 0,
TUESDAY,
WEDNESDAY
} Weekday;
typedef struct
{
int age;
int number;
Weekday weekday;
} Info;
typedef struct
{
int age;
Weekday weekday;
} Data;
Info info;
Data data;
info.weekday = data.weekday;
lint给出以下错误:
info.weekday = data.weekday; Type mismatch (assignment) (enum/enum)
如何将枚举分配给另一个枚举变量?
答案 0 :(得分:0)
在这里用逗号替换分号:
MONDAY = 0;
如果仍有错误,则需要显示更多代码。
编辑:我的错,不知道" lint"。
似乎皮棉有点过于偏执。这种任务不可能出错。正如AnthonyLambert所说,只是禁用此错误(或者不使用lint?)。
我能想到的最后一招,但是我不会赌它,就是命名你的枚举:
typedef enum Weekday
{
//...
} Weekday;
您拥有的最后一个选项(我不建议使用)是在您的结构中使用int:
typedef struct
{
// ...
int weekday;
} Info;
然后您可以为这些变量分配枚举器。
答案 1 :(得分:0)
您的代码不正确,它只是lint指出潜在的错误。如果使用C ++编译器编译,它将保留类型信息,则不会显示此错误。
问题是,只要你分配一个枚举值,就会在C中变成一个int类型。 所以,一旦你从平日阅读它的类型现在是int而不是工作日。
通过编码来解决lint中报告的错误的方法是强制它再次从枚举中分配。
void SetWeekday( Info *info, Data* data )
{
switch (Data->Weekday)
{
case MONDAY: info->Weekday = MONDAY;
case TUESDAY: info->Weekday = TUESDAY;
etc...
}
}
或者lint允许你单独禁用每个错误,这可能是最好的。
(此代码尚未编译,可能包含坚果和/或小昆虫等。)