今天练习的时候,又遇到一些小错误,又是一下子没找到问题,但是其实是很简单的问题。写了段代码,在链接是报了一个错误:
uplicate symbol _ToolbarMode in:
/Users/helpdesk/Library/Developer/Xcode/DerivedData/xxx-bxeqhqjuvphnuabolgwbzzprutpi/Build/Intermediates/xxx.build/Debug-iphonesimulator/xxx.build/Objects-normal/x86_64/file1.o
/Users/helpdesk/Library/Developer/Xcode/DerivedData/xxx-bxeqhqjuvphnuabolgwbzzprutpi/Build/Intermediates/xxx.build/Debug-iphonesimulator/xxx.build/Objects-normal/x86_64/file2.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
应该是在两个源文件中定义了相同名字的全局变量导致的,但是我反复检查了我的代码,没有相同的全局变量一样啊。又是那种有经验的人士可以一下子看出来的问题,新手需要反复检查。我觉得犯错误不可怕吧,实际操作了有错误是难免的,在平时遇到了,反而更好,有大把时间去查找原因,而且是自己亲身体验过的问题,印象也是特别深刻的。
经过仔细查找,还是找到了原因,细节的小问题。在这两个源文件里都包含了一个头文件,比如 test.h的头文件,里面想定义一个美剧类型供这两个文件使用,第一次的写法是这样的:
NS_ENUM(NSInteger, ToolbarMode)
{
TOOLBAR_OPERATORS,
TOOLBAR_MODES,
TOOLBAR_USER_CODE
};
貌似没什么问题啊,而且两个源文件里能正常使用和编译过啊,但仔细已看就有问题了。这样是相当于定义了一个ToolbarMode的变量,并不是一个类型啊,所以当有两个源文件包含了这个头文件以后,相当于在这两个源文件里定义了相同名字可的全局变量,导致了编译时出现的问题。实际上我是要定义的是一个类型,少了一个typedef,所以修改成这样就以了:
typedef NS_ENUM(NSInteger, ToolbarMode)
{
TOOLBAR_OPERATORS,
TOOLBAR_MODES,
TOOLBAR_USER_CODE
};
吃一堑,长一智,以前貌似没遇到过相似问题,这次遇到了,也花了些时间查找,我觉得遇到问题,解决问题,还是蛮开心的额,或许在别人看来不是一个问题吧。哈哈。。。记录一下,每天进步一点点啊。。。