objective-c - 将 NSString* 数组声明为全局外部时 Xcode 中的错误和警告

标签 objective-c global-variables linker-errors extern

我在类的头文件中声明了一个 NSString* 数组。
多边形.h

NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon", ...};

现在我在 PolyginShape.m 中使用它如下:

- (NSString*) name {
return (POLYGON_NAMES [self.numberOfSides]);
}

numberOfSides 是一个 iVar,它将指示存储多边形名称的索引
到目前为止一切顺利......编译没有任何错误

然后我在实现main方法的文件中添加了PolygonShape.h(注意:这些没有任何类定义和调用函数C-Style而不是obj-c Style)

#import "PolygonShape.h"

现在,当我编译时,出现构建(链接)错误

ld: duplicate symbol _POLYGON_NAMES in /Users/../Projects/CS193P/1B/What_A_Tool/build/What_A_Tool.build/Debug/What_A_Tool.build/Objects-normal/i386/PolygonShape.o and /Users/../Projects/CS193P/1B/What_A_Tool/build/What_A_Tool.build/Debug/What_A_Tool.build/Objects-normal/i386/What_A_Tool.o
collect2: ld returned 1 exit status

所以我浏览了堆栈溢出和其他论坛,大多数建议是将全局变量设置为 extern,所以我做了......

extern NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon" .. };

但是我仍然收到链接错误,并且现在还收到 2 条警告

warning: 'POLYGON_NAMES' initialized and declared 'extern'

在我导入 PolygonShape.h 的两个地方

我在这里错过了什么?

谢谢。

最佳答案

在头文件中将数组声明为:

extern const NSString* POLYGON_NAMES[];

在您的源文件中,定义数组并初始化内容:

const NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon" };

关于objective-c - 将 NSString* 数组声明为全局外部时 Xcode 中的错误和警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276171/

相关文章:

ios - 来自实用程序类的 sharedInstance 的 presentViewController

android - Kotlin 设置全局变量的值

MySQL wait_timeout 变量 - GLOBAL vs SESSION

c++ - 模板类继承链接器错误

ios - 在 iOS 8.x 中,字符在 WebVTT 中被破坏以用于字幕

objective-c - objective-c : decimalNumberByMultiplyingByPowerOf10 looses precision on perfect division

ios - 移除 View Controller 底部的灰色条 - iOS

Python,使用单例模式或仅使用全局变量

c++ - Arduino 链接未定义的引用

c++ - g++ 链接目标文件无法链接