obj-c标头变量的重复符号

时间:2009-12-15 15:33:12

标签: objective-c duplicate-data symbols

我的印象是,使用#import只会在每次构建时导入一次文件,但在尝试在标头中定义变量,然后在两个不同的源文件中导入该标头后,我会得到一个重复的符号链接器错误变量。这怎么可能?

3 个答案:

答案 0 :(得分:6)

#import使每个文件包含一次标题,但不是每个版本都包含一次。因此,您的变量是在导入标题的每个文件中定义的,并且由于整个项目中默认情况下全局变量可见,因此会出现链接器错误。
正确定义全局变量的方法(如果它是你想要做的)是在实现文件中定义它并用其他文件中的关键字external引用它。
还将标题中的变量定义为静态将限制其对单个文件的可见性,因此您不会得到任何错误,但可能不是您想要的结果;)

答案 1 :(得分:2)

#import确保“声明”仅包含一次。由于您定义的变量是一个“定义”,它会使您获得重复的符号链接器错误。

要解决此错误 - 请仅使用.h进行声明,使用.m进行定义

弗拉基米尔解释说你可以使用extern

答案 2 :(得分:1)

在我设置了一个新课程后,我突然出现了一堆重复的符号。

终于意识到我已经设法在.m文件中执行此操作:

#import "other-file.m"

注意'm'。 :)