2010-01-08 86 views
2

正如背景一样,主题项目“Project”中没有编译时错误或警告。链接时重复的符号

在两个(或更多类)中使用相同的实例变量名称有很多次。在下面,我将使用变量名称“index”作为示例。它在class1和class2中显示为一个实例变量。这两个类中的变量具有不同但相似的含义,因此使用了通用术语。

我在两者的Class1和等级2的头文件中定义的索引,例如:

@interface的Class1:NSObject的 { INT指数; } ...

对于class2重复。

当我生成项目,Xcode的报道:

在/Project/build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class1.o和/项目重复符号_index /build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class2.o

将“index”的出现次数更改为“indexnotverycommon”,将报告与新名称相同的错误。

分别将出现次数改为“index1”和“index2”可以消除错误。然后Xcode会报告链接期间发现的下一个重复内容,依此类推,等等。

我可以继续重命名过程,但我宁愿不要,因为我担心存在更多的病态潜在问题。

任何意见或问题表示赞赏。

+0

您可以发布您的类的完整文本(删除不必要的代码,直到它失败)。就我个人而言,我认为你应该仔细检查,看看你是否真的声明了两者都是@interface class1。 – 2010-01-08 18:04:02

回答

2

索引也是一个C函数,因此是Objective-C中一个非常不幸的名字。 这article描述了为什么使用索引作为名称不是一个好主意。

我不确定为什么你会得到重复的符号。

0

我想通过使用Xcode find-in-project功能。感谢有关索引的建议。

+10

这是因为你意外地有一个.m文件的#import,你的意思是.h? – cdespinosa 2010-01-08 20:59:00

+0

cdespinosa,希望我可以upvote这个,我跑出了想法,这是解决方案。谢谢。编辑:原来我可以upvote这:) – marimba 2011-08-24 12:40:28

0

提示检查#import "Xxx.m"而不是正确.h的工作。

"Xxx.m"的快速工作空间范围搜索发现了导致链接错误的include中的错误。

0

请勿#include或#import .m文件。只需将这些.m文件添加到Target |建立阶段。不要将.h文件添加到构建阶段,而是在需要这些功能的地方使用#import .h文件。

编译器知道这只是一个头文件“仅供参考”,而职能的机构将可用时,它会编译.m文件,并把他们都变成1个可执行

头文件只包含前向声明。编译器知道正文是在另一个文件中定义的,或者在链接到该项目的库中