我创建了下面的头文件,它定义了我将在整个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)
如何避免此错误?
答案 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
,然后在实现文件中定义它们一次。