我正在定义一个 NSString 用作 NSError 中的错误域,并正在复制 ASIHttpRequest 在那里做的事情。
NSString* const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
我把常量放在它自己的 .h 文件中 //FPServerAPICoordinatorConstants.h
#ifndef FirePlayer_FPServerAPICoordinatorConstants_h
#define FirePlayer_FPServerAPICoordinatorConstants_h
NSString* const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
#endif
但是当我将它包含在多个 .m 中时
SomeFile.m
#import "FPServerAPICoordinatorConstants.h"
SomeOtherFile.m
#import "FPServerAPICoordinatorConstants.h"
我收到链接器错误“重复符号”
ld: duplicate symbol _FPServerAPIErrorDomain in SomeFile.o and ....SomeOtherFile.o for architecture armv7
所以我将 const 更改为 #define,它工作正常。
// FPServerAPICoordinatorConstants.h
#ifndef FirePlayer_FPServerAPICoordinatorConstants_h
#define FirePlayer_FPServerAPICoordinatorConstants_h
//THIS WAS TRIGGERING link errors
//NSString* const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
//working OK
#define FPServerAPIErrorDomain @"FPServerAPIErrorDomain"
#endif
但是有没有办法让全局空间中的 const 不抛出“重复符号”?
最佳答案
在你想要的头文件中:
extern NSString *const FPServerAPIErrorDomain;
然后在一个实现文件中(所以您可能需要一个 FPServerAPICoordinatorConstants.m
),您需要:
NSString *const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
然后您可以将 header 导入多个文件而不会出现重复符号错误。
[顺便说一下,如果您使用的是 #import
,则不需要 #ifndef
守卫。]
关于objective-c - ld : duplicate symbol - caused by const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583473/