Objective c 整数常量不存在';不减少到整数';
我用这个代码来设置我的常数Objective c 整数常量不存在';不减少到整数';,objective-c,Objective C,我用这个代码来设置我的常数 // Constants.h extern NSInteger const KNameIndex; // Constants.m NSInteger const KNameIndex = 0; 在导入Constant.h文件的文件中的switch语句中,我有以下内容: switch (self.sectionFromParentTable) { case KNameIndex: self.types = self.facilityTypes
// Constants.h
extern NSInteger const KNameIndex;
// Constants.m
NSInteger const KNameIndex = 0;
在导入Constant.h文件的文件中的switch语句中,我有以下内容:
switch (self.sectionFromParentTable) {
case KNameIndex:
self.types = self.facilityTypes;
break;
...
我在编译时遇到了这样一个错误:“错误:case-label没有减少到整数常量”
你知道什么可能会弄糟吗?我想你必须使用
const int
而不是const NSInteger
,因为开关只适用于内置的整数类型。(不确定您的语法,在类型后循环使用const)
看看相关的问题:这是一个暗箭伤人的问题,因为我很久没有使用Cocoa/ObjC了,但是成员变量sectionFromParentTable不是int类型吗?对于C/C++和Objective-C,case语句在编译时必须有固定的值—“缩减为整数(读取值)” 你的常数不是一个真正的“常数”,因为它是一个变量,我想它可以通过一个指针来改变-例如
&KNameIndex
通常将常量定义为enum
enum {
KNameIndex = 0,
kAnotherConstant = 42
};
如果您使用C++或ObjuleC++(以.mm作为文件扩展名),可以使用const语句作为
const int KNameIndex = 0;
我没有使用过Objective C,但我会尝试放弃“extern”。如果这是C++,则<>代码>常数> m >代码>文件将不是<代码> > m > />代码>的编译单元的一部分,因此编译器的未知代码<代码> KNMAX索引>代码>的值将是未知的。这可以解释错误;不可知值不能是常数 将定义而不仅仅是声明放在
Constants.h
文件中是否有帮助?您可以使用
#define KNameIndex 0
...
switch (self.sectionFromParentTable) {
case KNameIndex:
self.types = self.facilityTypes;
break;
...
它应该会起作用
只是遇到了同样的问题,我决定使用#define而不是enum。为我工作™ ;-) 请注意,NSInteger被定义为int[typedef int NSInteger;]可能您想到的是NSNumber?啊,您是对的。我离熟练掌握Objective-C还有很长的路要走。const语句在Objective-C中是完全合法的,在NSInteger中也是完全可操作的。我在这里用minimal.m文件和gcc进行了测试,我得到了相同的“case label不会减少到整数常量”的“const int kAA=0”;常量(即使使用g++)
const int kTest=0;int main(){int a=1;开关(a){case-kTest:break;}
编译为.m给出了>>函数'main'中的test1.m:test1.m:8:错误:case-label未减少为整数常量