Целочисленная константа не сводится к целому числу '
Я использую этот код для установки моих констант
// Constants.h
extern NSInteger const KNameIndex;
// Constants.m
NSInteger const KNameIndex = 0;
И в операторе switch в файле, который импортирует файл Constant.h, у меня есть следующее:
switch (self.sectionFromParentTable) {
case KNameIndex:
self.types = self.facilityTypes;
break;
...
Я получаю ошибку при компиляции, которая читает это: "error: case label не сводится к целочисленной константе"
Любые идеи, которые могут быть испорчены?
Ответы
Ответ 1
Для C/С++ и Objective-C оператор case имеет фиксированные значения - "сведен к целому числу (прочитанное значение)" во время компиляции
Ваши константы не являются реальной "константой", потому что это переменная, и я думаю, ее можно изменить с помощью указателя - т.е. &KNameIndex
Обычно один определяет константы как enum
enum {
KNameIndex = 0,
kAnotherConstant = 42
};
Если вы используете С++ или Objective-C ++ (с расширением .mm как расширение файла), вы можете использовать оператор const как
const int KNameIndex = 0;
Ответ 2
Вы можете использовать
#define KNameIndex 0
...
switch (self.sectionFromParentTable) {
case KNameIndex:
self.types = self.facilityTypes;
break;
...
и он должен работать.
У меня была такая же проблема, и я решил перейти С#define, а не enum. Работает для меня и торговли;; -)
Ответ 3
Я не работал с Objective C, но я бы попробовал сбросить "extern". По крайней мере, если это был С++, файл Constants.m
не был бы частью блока компиляции Other.m
, поэтому значение KNameIndex
было бы неизвестно компилятору. Это объясняет ошибку; непознаваемое значение не может быть константой.
Помогает ли это определение, а не только объявление в файле Constants.h
?
Ответ 4
Это удар в темноте, потому что я не использовал Cocoa/ObjC в течение длительного времени, но является ли переменной-членом sectionFromParentTable не типа int?
Ответ 5
Я думаю, что вы застряли с использованием const int
вместо const NSInteger
, поскольку переключатель работает только со встроенными встроенными типами. (не уверен, что ваш синтаксис с const перевернулся после типа).
Посмотрите на связанный с этим вопрос: Objective-C переключатель с использованием объектов?