Objective-C ошибка: элемент инициализации не является константой
Почему компилятор дает мне следующее сообщение об ошибке в предоставленном коде: "элемент инициализации не является постоянным". Соответствующий код C/С++ отлично компилируется под gcc.
#import <Foundation/Foundation.h>
const float a = 1;
const float b = a + a; // <- error here
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here...
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
Ответы
Ответ 1
Этот код будет компилироваться правильно, если инструкции const float
появляются где-то, кроме области файла.
Это, по-видимому, часть стандарта. Важно, чтобы все объявленные переменные области файла инициализировались с помощью константных выражений, а не выражений с постоянными переменными.
Вы инициализируете float 'b' со значением другого объекта. Значение любого объекта, даже если оно является константой, не является постоянным выражением в C.
Ответ 2
@dreamlax верен, вы не можете иметь объявление const, инициализация которого зависит от другой переменной (const). Если вам нужен один, чтобы зависеть от другого, я предлагаю создать переменную, которую можно рассматривать как константу, и инициализировать ее только один раз. Подробнее см. Эти вопросы:
Ответ 3
У меня нет Xcode на моей машине, поэтому я не могу попробовать свой пример,
Но вы можете попробовать
#define A (1)
#define B (A + A)
const float a = A;
const float b = B;