2015-11-13 8 views
2
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; 
} 

Оценив маску emergenza.livello Я собираюсь проверить ее с помощью & LIV_EME_UNO. Если он отличается от 0, это означает, что бит в маске высок; но я получаю ошибку «ожидаемое выражение перед»! = «токен».ожидаемое выражение перед токеном '! =' ... Где я ошибаюсь?

ответ

5

В вашем коде Emergenza есть по существу a тип данных, а не переменная. Вы должны иметь переменную этого типа использовать оператор доступа к члену .

Emergenza Чтобы сделать переменную вместо типа данных это сделать:

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

В итоге, удалите typedef.

+0

Тогда я могу проверить [LIV_EME_UNO] только с переменной, а не с полем структуры? спасибо @sourav –

+0

@ F.Guerinoni Что вы имеете в виду? Вам нужно иметь переменную 'struct', чтобы применить оператор' .', не так ли? –

+0

Я использую 'Emergenza.Livello | = LIV_EME_UNO' и это работа, но' (Emergenza.Livello | = LIV_EME_UNO)! = 0' не работает ... –

Смежные вопросы