Initialiser 元素不是编译时常量

Posted

技术标签:

【中文标题】Initialiser 元素不是编译时常量【英文标题】:Initialiser element is not a compile time constant 【发布时间】:2012-08-29 04:06:36 【问题描述】:

在我的常量文件中,我包含了以下行

NSString * ALERT_OK = NSLocalizedString(@"Ok",@"Ok");

在此之后,当我尝试编译时收到以下错误

Initialiser element is not a compile time constant

如何调试?

【问题讨论】:

@Inafziger:感谢您的回复,我不应该将您的行包含在 contants 文件中吗? 是的,把我的行放在你的常量文件中,而不是你上面使用的那个。然后,在任何可以使用字符串的地方,都可以使用 ALERT_OK,它会为 Ok 提供本地化字符串。 【参考方案1】:

问题在于 NSLocalizedString 是一个根据语言返回不同值的函数。它不是一个常数,直到系统运行才能计算出来。

改为使用:

 #define ALERT_OK NSLocalizedString(@"Ok",@"Ok");

它现在只需将 ALERT_OK 替换为该函数即可。 (请注意,您应该对所有全局值使用某种前缀,这样您就不会意外创建在其他地方使用的具有相同名称的东西。)

【讨论】:

以上是关于Initialiser 元素不是编译时常量的主要内容,如果未能解决你的问题,请参考以下文章

“abc”[0] 不是编译时常量

MSVC 抱怨函数指针不是编译时常量

为啥 sizeof 表达式不是像 2、4、8 等这样的编译时常量?

编译时常量和变量

从文字字符串生成编译时常量整数

java中的编译时常量与运行时常量