重复的符号错误 - 全局常量

Max*_*kov 14 linker compiler-errors const objective-c

在类的标题中,在接口声明之外,我已经声明了全局常量:

NSString * const gotFilePathNotification = @"gotFilePath";
NSString * const gotResultNotification = @"gotResultOfType";
Run Code Online (Sandbox Code Playgroud)

gotResultNotification仅用于此类(尚未),但我在另一个类实现中引用了gotFilePathNotificaion.为此,我导入此标头.

当我尝试编译时,我在此标头中获得了有关gotFilePathNotification的重复符号链接器错误.为什么会这样?

Mah*_*esh 26

在文件范围的两个不同的编译单元中,您有两个具有相同名称的标识符.这违反了一个定义规则.相反,你需要 -

  1. 声明全局变量标记以在头文件中具有外部链接.

    extern NSString * const gotFilePathNotification;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在在一个源文件中提供定义.

    NSString * const gotFilePathNotification = @"gotFilePath";
    
    Run Code Online (Sandbox Code Playgroud)

现在,您需要使用这些变量,在源文件中包含标头.


Dav*_*vid 5

您需要在头文件中声明它们extern并在实现文件中定义它们.请参阅此问题以获得澄清. Cocoa/Objective-C中的全局变量?.

第二个答复提供了澄清,我将在此重申.变量的默认存储限定符是静态的.这意味着当您尝试使用相同的变量链接两个不同的文件时,就像导入头文件时一样,链接器将解释变量是多重定义的.