当我编译我的 iPhone 应用程序时,xCode 为我在 MyConstants.h 中的变量给出“重复符号”错误
我想如果我使用:
#import "MyConstants.h"
它会避免这种情况吗?
但我还是遇到了问题。
补充信息:
也许我应该问这个:
如果您需要访问所有 源代码文件的EVERY 部分中的常量...您会在.h 文件中放什么?您将使用什么在代码的其他部分包含该常量。
我认为(但我猜不是)这很简单:
(我没有在任何代码的任何地方重新定义 thisIsGlobal。)
然后只是在我的每个其他源文件的顶部“#import MyConstants.h”。
最佳答案
你可以做的是放在你的标题中(MyConstants.h
):
extern const int MyConstant;
extern NSString * const MyStringConstant;
并且在源文件中,包含上面的 header 但定义常量 (MyConstants.m
):
const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";
然后,您只需将 header 包含在使用这些常量之一的任何其他源文件中。 header 只是声明这些常量存在于某处,因此编译器不会提示,因为解析这些常量名称是链接器的工作。包含常量定义的源文件被编译,链接器看到常量所在的位置,并解析在其他源文件中找到的所有引用。
在 header (未声明为 static
)中声明和定义常量的问题在于,对于包含该 header 的每个文件,编译器将其视为独立的全局变量。当链接器尝试将所有已编译的源代码链接在一起时,它遇到全局名称的次数与包含 MyConstants.h
的次数一样多。
关于iphone - #import 仍然出现 "duplicate symbol"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754252/