iOS_小问题积累(duplicate symbo)

本文记录了一次iOS开发过程中遇到的符号重复错误及解决过程。问题源于两个源文件包含同一头文件并误将枚举类型声明为变量。通过添加typedef关键字修正,最终解决了编译错误。

今天练习的时候,又遇到一些小错误,又是一下子没找到问题,但是其实是很简单的问题。写了段代码,在链接是报了一个错误:

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

};

吃一堑,长一智,以前貌似没遇到过相似问题,这次遇到了,也花了些时间查找,我觉得遇到问题,解决问题,还是蛮开心的额,或许在别人看来不是一个问题吧。哈哈。。。记录一下,每天进步一点点啊。。。



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值