在我想要更改在程序开头声明的枚举值(全局)时,编译错误已经好几个月了,在一个用整数替换它的函数中。
在我没有这个问题之前,但是我已将代码从迷你arduino卡切换到ESP8266,问题出现了..它没有相同的编译器?
下面的错误仍在阻止并阻止我推进我的项目..我找不到解决方案:
ERROR : request for member 'state' in 'CYCLE_ARROSAGE', which is of non-class type '<anonymous enum>'
以下是问题的简化示例:
enum {
S, // SECURITE
N, // NUIT
J1_1, J1_2, J1_3, // Luminosité 1
J2_1, J2_2, J2_3, // Luminosité 2
J3_1, J3_2, J3_3, // Luminosité 3
} CYCLE_ARROSAGE; // SECURITE
void setup () {
CYCLE_ARROSAGE = N; // OK
}
void loop () {
CheckChangementCycleArrosage(J2_2);
}
void CheckChangementCycleArrosage(int NouveauCycle ){
if(CYCLE_ARROSAGE != NouveauCycle){
Serial.print("CYCLE CHECKE : ");
Serial.println(NouveauCycle); // -> 6
Serial.print("CYCLE CHECKE CAST: ");
Serial.println(String(NouveauCycle)); // -> 6
Serial.print("CYCLE ARROSAGE: ");
Serial.println(CYCLE_ARROSAGE); // -> 1
CYCLE_ARROSAGE = NouveauCycle; // -> ERROR
}
}
可能是什么解决方案?我不明白..
答案 0 :(得分:1)
您无法将int隐式转换为匿名枚举。 可能的解决方案是使用int中的静态强制转换,但是你应该声明你的枚举不是匿名的。
enum EnumName {S, // SECURITE
N, // NUIT
J1_1, J1_2, J1_3, // Luminosité 1
J2_1, J2_2, J2_3, // Luminosité 2
J3_1, J3_2, J3_3, // Luminosité 3
} CYCLE_ARROSAGE; // SECURITE
...
CYCLE_ARROSAGE = static_cast< EnumName >( NouveauCycle );
答案 1 :(得分:1)