C 在';之前应为表达式=';代币其中我';我错了?

C 在';之前应为表达式=';代币其中我';我错了?,c,struct,typedef,C,Struct,Typedef,在评估了maskemergencza.livelo之后,我将使用和LIV\u EME\u UNO检查它。如果它不同于0,这意味着掩码中的位较高;但是我得到了错误“expected expression before'!=“token”。在您的代码中,emergencza本质上是一个数据类型,而不是一个变量。您需要具有该类型的变量才能使用成员访问操作符 要使emergencza成为变量而不是数据类型,请执行以下操作: enum LIVELLI_EMERGENZA { LIV_EME_UNO

在评估了mask
emergencza.livelo
之后,我将使用
和LIV\u EME\u UNO
检查它。如果它不同于
0
,这意味着掩码中的位较高;但是我得到了错误“expected expression before'!=“token”。

在您的代码中,
emergencza
本质上是一个数据类型,而不是一个变量。您需要具有该类型的变量才能使用成员访问操作符

要使
emergencza
成为变量而不是数据类型,请执行以下操作:

enum LIVELLI_EMERGENZA {
    LIV_EME_UNO                                 = 0x0001,
    LIV_EME_DUE                                 = 0x0002,
    LIV_EME_TRE                                 = 0x0003
};

typedef struct Emergenza {
    int Tipo;
    short Livello;
} Emergenza;

void TrovaEmergenze()
{
    if(INPUT_GET(IN_FUNGO_EMERGENZA)) {
        Emergenza.Tipo |= EME_FUNGO_PREMUTO;
        Emergenza.Livello |= LIV_EME_UNO;
    }
    if((INPUT_GET(IN_FC_CARTER_LAMA))){
        Emergenza.Tipo |= EME_CARTER_LAMA_APERTO;
        Emergenza.Livello |= LIV_EME_DUE;
    }
}

char EmeLivello1()
{
    if((Emergenza.Livello & LIV_EME_UNO) != 0)
        return 1;
    return 0;
}

总之,删除
typedef

,然后我可以只使用变量而不使用结构的字段检查[LIV_EME_UNO]?谢谢@sourav@F.Guerinoni什么意思?你需要有一个
struct
变量来应用
操作符,不是吗?我使用
emergeza.Livello |=LIV_EME_UNO
,这是可行的,但是
(emergeza.Livello |=LIV_EME_UNO)0
无效…@SouravGhosh:typedef使用的语法还声明了一个名为emergeza的变量。@DavidCullen谢谢,我如何声明我的
结构
struct Emergenza {
        int Tipo;
        short Livello;
} Emergenza;