【发布时间】: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 编译。 -
您能否在某处埋藏一些错误的
Automatic、Off和Manual宏定义(可能是某种调试助手)?
标签: objective-c c xcode switch-statement enumeration