2012-01-22 3 views
1

Я пытаюсь сделать 2d-массив в объекте-c, и я действительно не хочу использовать 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 ли?

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

Поскольку это также помечен C++, вы можете использовать Ивар:

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

Тогда вы просто изменить размер и задать начальные значения элементов в инициализаторе вашего объекта.

В противном случае это глобальный или ivar? должен ли он быть const или изменяться?

+0

meh понятия не имею, что это за lol. Я не думаю, что xcode может использовать это. Он поддерживает C++, но не настолько. – GameMaker

+0

uhhh ..... это типичный 2D-массив в C++ - Xcode, GCC и Clang, все знают, что это такое. Если бы они не смогли поддержать это, они просто не могли сказать, что у них есть современная поддержка на С ++ :) – 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, но когда вы пытаетесь использовать массив, вы получаете ошибку: Неопределенные символы для архитектуры i386: «_aTiles», ссылка из: [Уровень загрузки LevelMaster] в LevelMaster.o note loadLevel - это функция, в которой я пробовал NSLog (@ "test% i", aTiles [3] [0]); – GameMaker

+0

* Когда вы используете массив в другой функции, вы получаете эту ошибку, вы можете использовать ее в функции, которую вы определили в – GameMaker

+0

Является ли LevelMaster в Objective-C или Objective-C++ (.m или .mm)? Как насчет extern и объявления aTiles? 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