我有两个带常量的类。
例如,有一个名为 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...
感谢您的帮助!
答案 0 :(得分:14)
如果常量仅在该单个实现文件中使用,则应将其声明前缀为static
。也就是说,转过来:
const int kWidth = 150;
进入这个:
static const int kWidth = 150;
static
关键字告诉编译器此符号仅在当前文件中使用。 1 如果没有它,编译器会假定您声明全局变量,可以从最终应用程序中的任何位置访问。声明两个具有相同名称的全局变量并不是一个好主意,因为你无法区分它们,所以编译器正确地抱怨。幸运的是,只需通过static
关键字更明确地表达您的意图,就可以轻松解决此问题。
答案 1 :(得分:1)
解决这种情况的另一种方法是“收集”类中的所有常量。这样,您可以更好地了解所有常量名称。缺点是,可以假设这些是全局变量,并不总是被认可。