我有一个名为“ID_KEY”的常量,它在 3 个单独的 .m 文件的顶部声明,这两个文件都不包含其他文件。
声明如下:
#import "PublicGamesResponse.h"
NSString *const ID_KEY = @"id";
...
@implementation PublicGamesResponse
另外两个类也是如此。但是我收到一个链接器错误,提示同名的多个定义(如果我要注释掉其中两个定义,这就会消失)。
我的问题是为什么链接器会提示这个? ID_KEY 的每个定义都在所有其他定义的范围之外,所以我不明白为什么链接器会提示。
作为免责声明,我清理了项目并重新启动了 xCode,并在站点上查找了类似的问题,但没有成功。
最佳答案
当您在函数外部定义变量或常量时,它们被放置在全局 范围内。链接器解析全局引用,并在多次找到相同名称时发出提示。
要给常量一个它们的编译单元范围(即定义它们的文件),在它们的定义前添加 static
:
static NSString *const ID_KEY = @"id";
这样,同一个文件中的所有函数和方法都可以访问 ID_KEY
,但名称将保留在文件的范围内。本质上,static
从链接器中“隐藏”名称。
关于ios - 不同范围内相同命名常量的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190038/