将NSString *数组声明为全局extern时Xcode中的错误和警告

时间:2009-08-14 05:17:30

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

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

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

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

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

numberOfSides是一个iVar,它将指示存储多边形名称的索引 到目前为止一直很好......它正在编译而没有任何错误

然后我在我的文件中添加了PolygonShape.h,它实现了main方法(注意:这些没有任何类定义,调用函数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的两个地方

我在这里缺少什么?

感谢。

1 个答案:

答案 0 :(得分:9)

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

extern const NSString* POLYGON_NAMES[];

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

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