【问题标题】:Getting an "Enumeration values 'x', 'y' and 'z' not handled in switch" message when, in fact, these enumerations are being handled. What's going on?当实际上正在处理这些枚举时,会收到“枚举值 'x'、'y' 和 'z' 未在 switch 中处理”消息。这是怎么回事?
【发布时间】:2012-01-18 21:46:35
【问题描述】:

我有一个这样定义的枚举:

//ModelClass.h
typedef enum { Automatic, Manual, Off } MyModes;

稍后,在 ViewController 中,我在一个方法中有一个 switch 语句,用于打开我的枚举类型的变量。我的 switch 语句如下所示:

//MyViewController.m
#import "ModelClass.h"

-(void) dryer:(MyClass *)m didChangeMode:(MyModes) newMode
{

    //Code within an instance method, utilizing the above enumeration
    switch (newMode) //newMode is an instance of MyMode enum.
    {
    case Automatic:
        //Some code...
        break;
    case Off:
        //Some code...
        break;
    case Manual:
        //Some code...
        break;
    }
}

上面的 switch 语句是从我的代码中复制/粘贴的,我所做的只是将功能代码替换为 //Some code... cmets。

XCode 不断在 switch (newMode) 行向我发出警告,指出“枚举值 'Automatic'、'Manual' 和 'Off' 未在 switch 中处理”。

此外,在每个 case 语句中,我都会收到一条错误消息,指出“表达式不是整数常量表达式”,尽管它应该是,因为它是一个枚举。

我该如何解决这个问题?奇怪的是,在MyModes 枚举之后的下一行中,我在ModelClass 标头(由4 个枚举项组成)中定义了另一个枚举,并且在我的视图控制器中,我有另一种方法正在执行完全相同的类型开关/外壳操作。使用该枚举器,我在该方法上没有收到任何警告或错误。

会发生什么?

编辑

我将方法声明放在代码 sn-p 中。 newMode 变量是该方法的参数。此外,上述其他正常工作的枚举器也作为参数传递给其他方法。

【问题讨论】:

  • 向我们展示newMode的声明。您能否编写一个能够显示该问题的小型独立程序?
  • @Keith,我修改了我的代码以显示newMode的定义,这实际上是一个方法参数。
  • 不,它们更加冗长,几乎没有相似之处。
  • 如果我复制粘贴这个确切的代码 + 只添加最少量的代码(@interface@implementation@class MyClass;)以使其有效,它可以用 clang 编译。
  • 您能否在某处埋藏一些错误的 AutomaticOffManual 宏定义(可能是某种调试助手)?

标签: objective-c c xcode switch-statement enumeration


【解决方案1】:

在上面cmets中KeithMicheal的帮助下,我已经能够解决这个问题了。根据 Keith 的建议,我正在回答我自己的问题。

这个问题是我自己的错,因为我在 ViewController 中定义了几个按钮,每个按钮分别命名为 AutomaticManualOff。编译器假定我引用的是我的 UIButtons 而不是 enum 类型,因为它们是局部范围的变量。

重命名枚举值并更新代码修复了此错误。就我而言,我重新定义了我的枚举:

typedef enum { AutoMode, ManualMode, OffMode } MyModes;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多