在objective-c中使用常量.重复的符号问题

Mat*_*der 3 objective-c

我有两个带常量的类.

例如,有一个名为class_a.m的类包含一个常量kWidth = 150,

我也有一个名为class_b.m的类caontain一个常量kWidth = 200

运行我的项目后,我得到一个带有重复符号的错误,但这些文件没有嵌套(我的意思是class_a到class_b或class_b到class_a).我也只使用这个constantin实现.

资源:

const int kWidht = 150;
Run Code Online (Sandbox Code Playgroud)

错误说明:

ld: duplicate symbol _kWidht...
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

BJ *_*mer 14

如果常量仅在单个实现文件中使用,那么您应该在其声明前加上static.就是这样:

const int kWidth = 150;
Run Code Online (Sandbox Code Playgroud)

进入这个:

static const int kWidth = 150;
Run Code Online (Sandbox Code Playgroud)

static关键字告诉编译器该符号仅在当前文件中使用.1没有它,编译器会假定您声明了一个全局变量,可以从最终应用程序中的任何位置访问该变量.声明两个具有相同名称的全局变量并不是一个好主意,因为你无法区分它们,所以编译器正确地抱怨.幸运的是,只需通过static关键字更明确地表达您的意图,就可以轻松解决这个问题.


1:更准确地说是"翻译单元",但"文件"对于这个问题来说已经足够了.