2

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

4

3 回答 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 回答