Objective-C错误:初始化元素不是常量

时间:2009-01-19 22:57:09

标签: objective-c

为什么编译器会在提供的代码上给出以下错误消息:“initializer element is not constant”。相应的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 个答案:

答案 0 :(得分:12)

如果const float语句出现在文件范围以外的其他地方,那么代码只能正确编译。

显然,它是标准的一部分。重要的是所有文件范围声明的变量都使用常量表达式初始化,而不是涉及常量变量的表达式。

您正在使用另一个对象的值初始化浮动'b'。任何对象的值,即使它是const限定的,也不是C中的常量表达式。

答案 1 :(得分:4)

@dreamlax 是正确的,你不能有一个const声明,其初始化依赖于另一个(const)变量。如果你需要一个依赖另一个,我建议创建一个你可以视为常量的变量并只初始化一次。有关详细信息,请参阅这些SO问题:

答案 2 :(得分:1)

我的机器上没有Xcode,所以我不能尝试我的例子,

但你可以试试吗

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

const float a = A;
const float b = B;