与背景一样,主题项目“Project”中没有编译时错误或警告。
在两个(或多个类)中使用相同的实例变量名称的次数很多。在下文中,我将使用变量名“index”作为示例。它在class1和class2中显示为实例变量。该变量在两个类中具有不同但相似的含义,因此使用了通用术语。
我在class1和class2的头文件中定义了索引,例如:
@interface class1:NSObject { int index; } ...
重复第2课。
当我构建项目时,Xcode报告:
/Project/build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class1.o和/Project/build/Project.build/Debug-iphonesimulator/Project.build中的重复符号_index /Objects-normal/i386/class2.o
将“index”的出现更改为“indexnotverycommon”,使用新名称报告相同的错误。
将出现次数分别更改为“index1”和“index2”可以消除错误。 Xcode然后报告它在链接期间找到的下一个副本,依此类推,等等。
我可以继续重命名过程,但我不愿意,因为我担心会有更多病态的潜在问题。
感谢任何建议或问题。
答案 0 :(得分:2)
index也是一个C函数,因此在Objective-C中是一个非常不幸的名字。 这个article描述了为什么使用索引作为名称不是一个好主意。
我不确定为什么你会得到重复的符号。
答案 1 :(得分:0)
我使用Xcode find-in-project功能想出来了。感谢关于索引的建议。
答案 2 :(得分:0)
检查#import "Xxx.m"
而不是正确.h工作的提示。
快速搜索工作区"Xxx.m"
,发现include
中导致链接错误的错误。
答案 3 :(得分:0)
不要#include或#import .m文件。只需将这些.m文件添加到Target |中建立阶段。不要将.h文件添加到构建阶段,而是将#import .h文件添加到需要这些功能的任何地方。
编译器知道它只是一个“仅用于信息”的头文件,并且在编译.m文件并将它们全部放入1个可执行文件时,函数体将可用
头文件仅包含前向声明。编译器知道正文在另一个文件中定义,或者在链接到项目的lib中