多个接口具有相同的实现 - 重复的符号错误 - 目标 - c

时间:2013-10-19 23:40:04

标签: objective-c xcode duplicate-symbol

我正在使用一个名为NSObject类的静态库     '的ClientRequest'

我必须将ClientRequest类型的NSObject导入我的其他类:A,B和C.

所以上面提到的所有类都实现如下

#import "ClientRequest.h"

@interface A : ClientRequest

#import "ClientRequest.h"

@interface B : ClientRequest

#import "ClientRequest.h"

@interface C : ClientRequest    

静态库项目(.xcodeproj)已添加到我自己的项目中,目标包含在静态库中。 当我运行自己的项目时,A和B,A和C& A的'重复符号_API_BASE_ for i386架构'错误。 A和ClientRequest。

任何想法如何解决这个问题?类A,B和C使用ClientRequest的方法。

1 个答案:

答案 0 :(得分:1)

如果没有其他信息,很难确定你正在做什么。但是,从给出的内容来看,您似乎在API_BASE文件中定义ClientRequest.h,以便在每个文件中包含一个新项目,并且最终会有多个项目。

如果您错误地定义了一个全局变量,可能会发生这种情况。

如果您在ClientRequest.h中声明一个全局变量,比如说:

int API_BASE;

然后编译的每个文件(包括标题)将定义其自己的变量副本,并且您将获得重复的符号错误。正确的方法是将变量声明作为标题中的`extern:

extern int API_BASE;

并在ClientRequest.m中定义一次:

int API_BASE;

extern关键字表示您正在声明将在别处定义的变量的名称和类型。

所有函数/方法声明都是隐式外部的,但关键字是变量所必需的。

HTH