我的印象是,使用#import 每次构建只会导入一次文件,但是在尝试在标头中定义变量,然后将该标头导入两个不同的源文件中之后,我得到了变量的重复符号链接器错误。这怎么可能?
问问题
3307 次
3 回答
6
#import
使每个文件包含一次标头,但不是每个构建。因此,您的变量是在您导入标头的每个文件中定义的,并且由于默认情况下全局变量在整个项目中可见,您会收到链接器错误。
定义全局变量的正确方法(如果它是您想要做的)是在实现文件中定义它并在其他文件中使用关键字 external 引用它。
还将标头中的变量定义为静态将限制其对单个文件的可见性,因此您不会收到错误,但可能不是您想要的结果;)
于 2009-12-15T15:38:49.273 回答
2
#import
确保“声明”只包含一次。由于您正在定义一个变量,它是一个“定义”,这会使您得到一个重复的符号链接器错误。
要解决此错误 - 仅使用 .h 进行声明,使用 .m 进行定义
正如弗拉基米尔解释的那样,您可以使用 extern
于 2009-12-16T04:28:14.920 回答
1
新建班级后突然出现一堆重复的符号。
终于意识到我设法在 .m 文件中做到了这一点:
#import "other-file.m"
注意'm'。:)
于 2013-07-19T12:29:52.850 回答