Ошибка Objective-C: элемент инициализатора не является константой - PullRequest
10 голосов
/ 20 января 2009

Почему компилятор выдает мне следующее сообщение об ошибке в предоставленном коде: «элемент инициализатора не является константой». Соответствующий код 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;
}

Ответы [ 3 ]

12 голосов
/ 20 января 2009

Этот код будет правильно скомпилирован, только если операторы const float появятся где-то, кроме области видимости файла.

Это часть стандарта, по-видимому. Важно, чтобы все объявленные переменные области файла инициализировались с помощью константных выражений, а не выражений с постоянными переменными.

Вы инициализируете float 'b' значением другого объекта. Значение любого объекта, даже если оно определено как const, не является константным выражением в C.

4 голосов
/ 30 июня 2009

@ dreamlax правильно, вы не можете иметь объявление const, инициализация которого зависит от другой (const) переменной. Если вам нужно, чтобы одно зависело от другого, я предлагаю создать переменную, которую вы можете рассматривать как константу, и инициализировать ее только один раз. См. Эти вопросы SO для деталей:

1 голос
/ 20 января 2009

У меня нет XCode на моей машине, поэтому я не могу попробовать мой пример,

Но можете ли вы попробовать

#define A (1) 
#define B (A + A)

const float a = A;
const float b = B;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...