2012-01-22 11 views
1

私はobjective-cで2次元配列を作成しようとしていますが、実際にはNSArrayを使用する必要はありません。なぜなら、intを使用していてコードが煩わしいからです。{[array objectAtIndex:x] objectAtIndex:y]数字をNSNumberから元に戻すには...余分な作業がたくさんあるようです。iPhone SDK 2d int array

以下の操作はできませんか?

// .h file 
int aTiles[10][2]; 

// .m file 
aTiles = { 
     { 0, 0}, // 0 
     { 0, 1}, // 1 
     { 1, 5}, // 2 
     { 0, 0}, // 3 
     { 0, 0}, // 4 
     { 0, 0}, // 5 
}; 

それは同じライン(int a[x][x] = {...};)で一緒に動作しますが、私は私がどの関数からもアクセスすることができますので、配列は、公開する必要があります。

セカンドラインにはセミコロンが必要です。

おかげ

答えて

0

あなたは// 5

近くの余分なコンマを持っているように見えますが、aTilesための型を宣言する必要がありますか?これはまた、C++をタグ付けされているので

int aTiles = ... 
+0

これは許可されています。 –

+0

Jon Skeetはここで素敵な説明をしてくれます:http://stackoverflow.com/questions/7043372/int-a-1-2-weird-comma-allowed-any-particular-reason/7043410#7043410 –

+0

Jon Skeet - それはあなたができる最高の? ;-) – Rayfleck

0

、あなたはIVARを使用することができます。

std::vector<std::vector<int> > tiles; 

その後、あなたは自分のオブジェクトの初期化子で初期要素値のサイズを変更して設定します。

それ以外の場合は、これはグローバルか象牙か?それはconstまたは変更可能なはずですか?

+0

私はそれが笑であるか分かりません。私はxcodeがこれを使うことができるとは思わない。それはC++をサポートしていますが、その程度まではサポートしていません。 – GameMaker

+0

uhhh .....これはC++の典型的な2D配列です.Xcode、GCC、Clangはすべてそれが何であるかを知っています。彼らはこれをサポートすることができなかった場合、彼らは現代のC + +のサポートを持っていると言うことはできません:) – justin

0

私はあなたの元のコードをしようとしたとき、私は少し異なるエラーを得たが、これは働いていた:

// .h file 
extern int aTiles[10][2]; 

// .m file 
int aTiles[10][2] = { 
     { 0, 0}, // 0 
     { 0, 1}, // 1 
     { 1, 5}, // 2 
     { 0, 0}, // 3 
     { 0, 0}, // 4 
     { 0, 0}, // 5 
}; 
+0

それはexternを使用するときに動作しますが、あなたがエラーを取得しようとすると、配列を使用する:Unknown symbols for architecture i386: "_aTiles"参照:LevelMaster.oの[LevelMaster loadLevel] loadLevelは、NSLog(@ "test%i"、aTiles [3] [0])を試した関数です。 – GameMaker

+0

*別の関数で配列を使用すると、そのエラーが発生します。 – GameMaker

+0

Objective-CまたはObjective-C++(.mまたは.mm)でLevelMasterですか? aTilesのexternと宣言はどうですか? Obj-CまたはObj-C++? – iccir

0

どのようにこの素晴らし...(本当に)

間違い
// .h 
int aTiles[10][2]; 

// .m 
int a[10][2] = { 
     { 0, 0}, // 0 
     { 0, 1}, // 1 
     { 1, 5}, // 2 
     { 0, 0}, // 3 
     { 0, 0}, // 4 
     { 0, 0}, // 5 
}; 

for (int r = 0; r <= 5; r++) { 
    for (int c = 0; c < 2; c++) { 
     aTiles[r][c] = a[r][c]; 
    } 
} 

周りの仕事について、しかし、他の方法では理解できません。誰かが正しい方法を見つけたら、私に知らせてください:P