整数常量'不会减少为整数'

Dan*_*gan 17 objective-c

我用这段代码设置我的常量

// Constants.h
extern NSInteger const KNameIndex;

// Constants.m
NSInteger const KNameIndex = 0;
Run Code Online (Sandbox Code Playgroud)

在导入Constant.h文件的文件中的switch语句中,我有:

switch (self.sectionFromParentTable) {
    case KNameIndex:
        self.types = self.facilityTypes;
        break;
    ...
Run Code Online (Sandbox Code Playgroud)

我在编译时遇到错误:"错误:case标签不会减少为整数常量"

什么想法可能搞砸了?

epa*_*tel 22

对于C/C++和Objective-C,case语句必须具有固定值 - 在编译时"缩减为整数(读取值) "

你的常量不是一个真正的"常量",因为它是一个变量,我想它可以通过指针改变 - 即 &KNameIndex

通常将常量定义为 enum

enum {
    KNameIndex = 0,
    kAnotherConstant = 42
};
Run Code Online (Sandbox Code Playgroud)

如果您使用C++或Objective-C++(.mm作为文件扩展名),您可以使用const语句作为

const int KNameIndex = 0;
Run Code Online (Sandbox Code Playgroud)


小智 11

您可以使用

#define KNameIndex 0

...

switch (self.sectionFromParentTable) {
        case KNameIndex:
                self.types = self.facilityTypes;
                break;
        ...
Run Code Online (Sandbox Code Playgroud)

它应该工作.

刚遇到同样的问题,我决定选择#define而不是enum.为我工作™;-)


cra*_*str -1

我认为您坚持使用 aconst int而不是 aconst NSInteger因为开关仅适用于内置整数类型。(不确定你的语法在类型之后翻转了 const )。

看看相关问题:Objective-C switch using object?