当我编译 iPhone 应用程序时,xCode 为 MyConstants.h 中的变量给出“重复符号”错误
我想如果我使用:
#import "MyConstants.h"
它会避免这种情况吗?
但我仍然有问题。
添加信息:
在“链接”期间发生错误。
(我只是使用 xCode 的“Build and Go”按钮。)
我也尝试了(#import 不需要的)#ifndef/def 方法。
也许我应该问这个:
如果您需要访问常量EVERY部分ALL你的源代码文件...你会在 .h 文件中放入什么?您将使用什么将该常量包含在代码的其他部分中。
我认为(但我想事实并非如此)很简单:
MyConstants.h> int thisIsGlobal = 123;
(我在任何代码中的任何地方都没有重新定义 thisIsGlobal 。)
然后只需在我的其他每个源文件的顶部添加“#import MyConstants.h”即可。
你可以做的就是把它放在你的标题中(MyConstants.h
):
extern const int MyConstant;
extern NSString * const MyStringConstant;
在源文件中,包含上面的标头,但定义常量 (MyConstants.m
):
const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";
然后,您只需将标头包含在使用这些常量之一的任何其他源文件中。标头只是声明这些常量存在于某处,因此编译器不会抱怨,因为解析这些常量名称是链接器的工作。包含常量定义的源文件被编译,链接器发现这是常量所在的位置,并解析在其他源文件中找到的所有引用。
在标头中声明和定义常量的问题(未声明为static
)的原因是编译器将其视为包含该标头的每个文件的独立全局变量。当链接器尝试将所有编译源链接在一起时,它遇到全局名称的次数与您包含的次数一样多MyConstants.h
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)