クラスのヘッダーファイルでNSString*の配列を宣言しています。
PolygonShape.h
NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon", ...};
現在、PolyginShape.mでこれを次のように使用しています。
- (NSString*) name {
return (POLYGON_NAMES [self.numberOfSides]);
}
numberOfSidesは、ポリゴン名が格納されているインデックスを示すiVarです
。これまでのところ、エラーなしでコンパイル
されていました。
次に、mainメソッドを実装するファイルにPolygonShape.hを追加しました(注:これらには、クラス定義と呼び出し関数obj-cスタイルではなくCスタイル)
#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 NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon" .. };
ただし、リンクエラーが発生し、2つの警告が表示されます。
warning: 'POLYGON_NAMES' initialized and declared 'extern'
PolygonShape.hをインポートしている両方の場所で
ここで何が欠けていますか?
ありがとう。