3

我有两个带有常量的类。

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

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

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

来源:

const int kWidht = 150;

错误描述:

ld: duplicate symbol _kWidht...

感谢帮助!

4

2 回答 2

14

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

const int kWidth = 150;

进入这个:

static const int kWidth = 150;

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


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

于 2012-04-06T12:34:04.180 回答
1

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

于 2013-08-04T15:29:17.107 回答