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

时间:2012-04-06 12:21:41

标签: objective-c

我有两个带常量的类。

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

我还有一个名为 class_b.m 的课程,其中包含一个常数kWidth = 200

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

来源:

const int kWidht = 150;

错误说明:

ld: duplicate symbol _kWidht...

感谢您的帮助!

2 个答案:

答案 0 :(得分:14)

如果常量仅在该单个实现文件中使用,则应将其声明前缀为static。也就是说,转过来:

const int kWidth = 150;

进入这个:

static const int kWidth = 150;

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

<小时/> 1:更准确地说“翻译单位”,但“文件”对于这个问题来说已经足够了。

答案 1 :(得分:1)

解决这种情况的另一种方法是“收集”类中的所有常量。这样,您可以更好地了解所有常量名称。缺点是,可以假设这些是全局变量,并不总是被认可。