使用全局常量时,体系结构的重复符号

时间:2015-08-10 19:49:29

标签: ios objective-c

我创建了下面的头文件,它定义了我将在整个iOS应用程序中使用的常量列表。

//
//  constants.h
//

#ifndef constants_h
#define constants_h

 NSString* const BaseURL = @"https://.../";
 NSString* const personalFeed = @"https://...";
 NSString* const professionalFeed = @"https://...";

 NSString* const profiles = @"https://...";


 NSString* const profileImages = @"https://...";
 NSString* const profileCollage = @"https://...";

 NSString* const login = @"https://...";
 NSString* const signup = @"https://...";
#endif

在所有控制器中我都需要这些。我添加了他们的头文件,如下所示:

#include "constants.h"

然而,当我构建应用程序时,我收到错误:

ld: 72 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如何避免此错误?

2 个答案:

答案 0 :(得分:3)

问题发生的原因是您在头文件中定义了常量,而不是声明它们。您需要将定义移动到.m文件中,并将其替换为标题中的extern声明:

//
//  constants.h
//

#ifndef constants_h
#define constants_h

extern NSString* const BaseURL;
extern  NSString* const personalFeed;
...
//
//  constants.m
//
#import "constants.h"

NSString* const BaseURL = @"https://.../";
NSString* const personalFeed = @"https://...";

答案 1 :(得分:2)

不要在头文件中定义变量。在标头中将它们声明为extern,然后在实现文件中定义它们一次。