ios - 不同范围内相同命名常量的链接器错误

标签 ios objective-c xcode

我有一个名为“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/

相关文章:

ios - 删除 bridgeToObjective-C 意味着我不能使用 NSRange

ios - 使用 swift 集成 stripe SDK

ios - SKAction.fadeOut(withDuration : 2. 0) 是从场景中移除节点还是仅将其移除 "hides"?

ios - 字符串数组到字符串转换 Swift

ios - 可以从库的PHAsset中获取图像

ios - coredata NSFetchRequest 一对多关系 托管对象上的关系错误

ios - 用数组填充 UITableView

objective-c - Xcode 链接器错误 : _OBJC_CLASS_$_CIImage

objective-c - UIPopoverController' 已弃用 : first deprecated in iOS 9. 0

c - 体系结构 x86_64 MAC GCC 的 undefined symbol