C++ 为什么我的开关/案例在使用枚举时是默认的?
我在Arduino 1.8.7中有以下C++ 为什么我的开关/案例在使用枚举时是默认的?,c++,arduino,C++,Arduino,我在Arduino 1.8.7中有以下switch/case语句,其中变量led是一个整数: switch (led) { case ALL: { /* do stuff */ break; } case LED1: { /* do stuff */ break; } case LED2: { /* do stuff */ break; } case LED3: { /* do stuff */
switch/case
语句,其中变量led
是一个整数:
switch (led) {
case ALL: {
/* do stuff */
break;
}
case LED1: {
/* do stuff */
break;
}
case LED2: {
/* do stuff */
break;
}
case LED3: {
/* do stuff */
break;
}
case LED4: {
/* do stuff */
break;
}
default: {
break;
}
}
我还有以下enum
:
enum LED_References_e
{
ALL = 0,
LED1 = 1,
LED2 = 2,
LED3 = 3,
LED4 = 4
};
当使用枚举值作为语句的实例时,语句总是命中default
子句。如果我用枚举值替换它们所表示的整数(即情况0:…情况1:…
),则语句将按预期运行
在语句中使用枚举值时,我尝试引用枚举数作为执行切换的值:
switch ((LED_References_e)led)
但这也是每次都默认的
我正在我的程序中使用另一个枚举器,该枚举器功能正常,但是它是使用if/else
而不是switch/case
进行有条件测试的
我的问题有两个:
switch/case
语句似乎不适用于枚举值if/else
和switch/case
之间,我缺少什么基本区别假设Max Langhof是正确的,并且还有其他名称
ALL
,LED1
,等等。。。在开关的作用域中,使LED\u参考
参考隐藏,这应有助于:
我对标准C++和ARDUINO C++的区别不太确定,但你应该能做到以下几点:
enum LED_References_e
{
ALL = 0,
LED1 = 1,
LED2 = 2,
LED3 = 3,
LED4 = 4
};
switch (led) {
case LED_References_e::ALL: {
/* do stuff */
break;
}
case LED_References_e::LED1: {
/* do stuff */
break;
}
case LED_References_e::LED2: {
/* do stuff */
break;
}
case LED_References_e::LED3: {
/* do stuff */
break;
}
case LED_References_e::LED4: {
/* do stuff */
break;
}
default: {
break;
}
}
它的作用是告诉编译器您明确希望从LED\u引用\u e
enum中获取LED1
..LED4
。
如果在同一范围内有其他
LEDx
e,则应消除歧义。开关处的范围内可能有其他名称ALL
,LED1
等,因此LED\u参考值不可见。您能否生成一个表达式,以便我们进一步研究它?带有枚举的Switch语句工作正常。问题出在代码的其他地方。如果您有C++11,请为LED_引用使用enum类。@Peterderman您是对的,我正在导入的另一个模块中使用了同名常量。谢谢你鼓励我去别处看看;应该会有一些编译器警告,但是嘿,呵呵@AdamMitchell这不是编译器警告,因为来自不同作用域的名称阴影通常不是无意的()。这尤其是使用enum class
的一个很好的理由——如果其他值的类型一开始就不正确,那么就不会发生这些意外。