在不同的文件中不能有2个具有相同名称的consts?

时间:2014-09-17 16:56:17

标签: ios objective-c constants linker-errors

所以这对我来说实际上是有意义的,但我觉得奇怪的是这个"问题"在我去修改文件之前很长一段时间没有问题。


我有一个ViewController类,它将常量变量lineWidth定义为

const int lineWidth = 2;

在另一个名为GridView的类中,我定义了相同的常量

const int lineWidth = 2;

这些都在任一类的.m文件中。 ViewController.h确实导入了GridView.h。


直到今天我才对GridView.m进行修改,这根本没有引起任何问题。修改与这个常量变量无关;我只是在课堂上添加了另一个构造函数。当我构建项目时,我收到了这个错误:

Apple Mach-O Linker error: duplicate symbol '_lineWidth' in ViewController.o and GridView.o

我之前从未见过这个错误。


经过一些试验和错误后,我可以在将其中一个更改为nLineWidth之后让项目进行构建。现在我想我发现问题是我从ViewController.h导入GridView.h,然后导入ViewController.m和GridView.m,两者都定义了这个常量变量,导致错误。

我的问题,

然而,这就是为什么直到这一点才能正确构建的原因。这是XCode 5.1.1中引入的新标志吗?我觉得有趣的是,在我开始修改该文件之前,这不是一个问题。当需要重建该文件时,问题出现了。

1 个答案:

答案 0 :(得分:3)

将它们更改为:

static const int lineWidth = 2;

这将使每个特定于它所定义的文件。每个都可以有自己的值而不影响另一个。如果没有static,它们都被声明为app全局变量,并且两个具有相同名称的变量不起作用。

如果您想要一个共享全局,请将以下内容添加到.h文件中:

extern const int lineWidth;

然后将以下内容添加到一个(对应的).m文件中:

const int lineWidth = 2;

这将创建一个可以通过导入.h文件在任何地方使用的单个全局。