iOS_小问题积累(duplicate symbo)

来源:互联网 发布:java 数据交换平台 编辑:程序博客网 时间:2024/05/17 08:43

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

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

};

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



0 0
原创粉丝点击