当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Objective-C错误:初始化元素不是常量》经验,为你挑选了1个好方法。

为什么编译器在提供的代码上给出以下错误消息:"初始化元素不是常量".相应的C/C++代码在gcc下完美编译.

#import 

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;
}

dreamlax.. 12

如果const float语句出现在文件范围之外的其他位置,那么该代码将只能正确编译.

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

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



1> dreamlax..:

如果const float语句出现在文件范围之外的其他位置,那么该代码将只能正确编译.

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

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


@hhafez - 在这种情况下,'b'不是用另一个对象初始化的,而是用另一个原语初始化的.但是,它们都被声明为'const','b'取决于'a'的值,这是标准的非法.
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有