0

ファイルCarArray(拡張子なし)には、次のような配列があります(これは非常に単純化されたバージョンです):

NSString *cars[5][3] = {
    {@"1A", @"1B", @"1C"},
    {@"2A", @"2B", @"2C"},
    {@"3A", @"3B", @"3C"},
    {@"4A", @"4B", @"4C"},
    {@"5A", @"5B", @"5C"}
}

今、複数のファイルの配列からデータを読み取りたいので、単に使用します#import "CarArray"

そして、ループを使用してデータを読み取ります。次に、次のようなエラーが表示されます。

duplicate symbol _cars in:
/Users/Adam/Library/Developer/Xcode/DerivedData/Auto_Center-hgjlsqanvyynncgyfzuorxwchqov/Build/Intermediates/Auto Center.build/Debug-iphonesimulator/Auto Center.build/Objects-normal/i386/DetailViewController.o
/Users/Adam/Library/Developer/Xcode/DerivedData/Auto_Center-hgjlsqanvyynncgyfzuorxwchqov/Build/Intermediates/Auto Center.build/Debug-iphonesimulator/Auto Center.build/Objects-normal/i386/ModelListViewController.o
ld: 1 duplicate symbol for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

どうすればその問題を解決できますか?

4

2 に答える 2

5

今、複数のファイルの配列からデータを読み取りたいので、単に使用します#import "CarArray"

これは、複数の場所から配列データにアクセスする方法として正しくありません。これは、ファイルを複数回使用する状況で複数の定義が作成されるためです。

配列を共有する 1 つの方法は、ヘッダーに宣言を提供し、.m ファイルに実装を提供することです。

CarArray.h:

extern NSString *cars[5][3];

CarArray.m:

#import "CarArray.h"

NSString *cars[5][3] = {
    {@"1A", @"1B", @"1C"},
    {@"2A", @"2B", @"2C"},
    {@"3A", @"3B", @"3C"},
    {@"4A", @"4B", @"4C"},
    {@"5A", @"5B", @"5C"}
}

使用#import "CarArray.h"したいファイルで使用しますcars

もう 1 つの方法は、グローバル変数をラップするクラスを作成し、配列にアクセスするためのクラス メソッドを提供することです。

于 2015-01-11T13:08:06.403 に答える
0

ヘッダー ファイル ("CarArray.h") で配列を宣言する必要がありますが、別の実装ファイル ("CarArray.m") で値を定義して初期化する必要があります。

于 2015-01-11T13:08:35.303 に答える