【问题标题】:Multiple Interfaces having same implementation - Duplicate Symbol Error- Objective - c具有相同实现的多个接口-重复符号错误-目标-c
【发布时间】:2013-10-19 23:40:03
【问题描述】:

我正在开发一个名为 NSObject 类的静态库 '客户请求'

我必须将 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 以及 ClientRequest 的“重复符号 _API_BASE_ for i386 架构”错误。

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

【问题讨论】:

  • 如何导入文件?
  • 我已经编辑了详细信息

标签: objective-c xcode duplicate-symbol


【解决方案1】:

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

发生这种情况的一种方式是,如果您错误地定义了一个全局变量。

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

int API_BASE;

然后每个编译的包含标题的文件将定义它自己的该变量的副本,您将得到重复的符号错误。正确的做法是在标头中将变量声明为`extern:

extern int API_BASE;

并在ClientRequest.m中定义一次:

int API_BASE;

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

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

HTH

【讨论】:

    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2019-05-11
    相关资源
    最近更新 更多