iphone - #import 仍然出现 "duplicate symbol"错误

标签 iphone c xcode import compiler-errors

当我编译我的 iPhone 应用程序时,xCode 为我在 MyConstants.h 中的变量给出“重复符号”错误

我想如果我使用:

#import "MyConstants.h"

它会避免这种情况吗?

但我还是遇到了问题。

补充信息:

  • 错误发生在“链接”期间。 (我只是使用 xCode 的“Build and Go”按钮。)

  • 我也尝试了(#import 不需要)#ifndef/def 方法。

    也许我应该问这个:

    如果您需要访问所有 源代码文件的EVERY 部分中的常量...您会在.h 文件中放什么?您将使用什么在代码的其他部分包含该常量。

    我认为(但我猜不是)这很简单:

  • MyConstants.h> int thisIsGlobal = 123;

    (我没有在任何代码的任何地方重新定义 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/

    相关文章:

    ios - Xcode 5 IOS 7 错误 : failed to launch '/private/var/mobile/Applications/' -- NotFound

    iphone - 如何禁用 UITextField 或键盘的文本自动更正?

    c++ - 强制忽略重复符号?

    memcpy 可以用于类型双关吗?

    iphone - 在 Xcode 中,我是否在 build 或 version 下输入应用程序的版本号

    ios - react native 错误 ld : library not found for -lBVLinearGradient

    ios - 获取 CFAbsoluteTime 和 NSDate 之间的时间差

    ios - iPhone 6s - iOS 9.1 在 [UICollectionViewController previewingContext :viewControllerForLocation:] 上崩溃

    c++ - libdmtx 死了吗,建议更换?

    ios - UIPageViewController 具有以编程方式生成的 View 数组