2012-01-22 71 views
1

我想在objective-c中創建一個2d數組,並且我不想使用NSArray,因爲我使用int並且代碼會很煩人:{[array objectAtIndex:x] objectAtIndex:y],更不用說我會擁有將數字從NSNumber轉換回來...看起來像很多額外的工作。iPhone SDK 2d int數組

我不能執行以下操作嗎?

// .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

允許在那裏。 – 2012-01-22 23:19:42

+0

Jon Skeet在這裏給出了一個可愛的解釋:http://stackoverflow.com/questions/7043372/int-a-1-2-weird-comma-allowed-any-particular-reason/7043410#7043410 –

+0

喬恩Skeet - 是你能做的最好嗎? ;-) – Rayfleck

0

因爲這也被標記了C++,你可以使用伊娃:

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

然後你只需調整和你的對象的初始化設置的初始元素值。

否則,這是全球性的還是國際性的?它應該是常量還是可變的?

+0

我不知道這是什麼是大聲笑。我不認爲xcode可以使用它。它支持C++,但不是那樣。 – GameMaker

+0

uhhh .....這是一個典型的C++二維數組 - 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時它確實工作,但是當你嘗試和使用數組時,你會得到錯誤:架構i386的未定義符號:「_aTiles」,參考:LevelMaster.o中的[LevelMaster loadLevel]說明loadLevel是我嘗試使用NSLog的函數(@「test%i」,aTiles [3] [0]); – GameMaker

+0

*當你在另一個函數中使用數組時,你可以在你定義的函數中使用它 – GameMaker

+0

在Objective-C或Objective-C++(.m或.mm)中是LevelMaster嗎?怎麼樣外部和一個Tiles的聲明? 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