2013-05-15 84 views
0

我想從函數創建一個數組。下面顯然的作品,但是因爲我的數組更大,我想節省空間和時間寫出來。使用函數創建數組 - Objective-C++

GLfloat gCubeTextureData_floorj[2] = { 1.0, 1.0 }; 

在我試圖創建一個從功能的陣列,我得到的是「數組初始化函數必須是一個初始化列表」的錯誤。不過,我正在通過返回列表來初始化數組。這是我的函數調用:

GLfloat array[2] = [self createCubeTextureFromX1:0.5f toX2:1.0f toY1:0.0f andY2:0.5f]; 

我已經嘗試了功能如下:

-(GLfloat[2]) createCubeTextureFromX1:(float)x1 toX2:(float)x2 toY1:(float)y1 andY2:(float)y2 { 
    GLfloat gCubeTextureData_floorj[2] = { 1.0, 1.0 }; 
    return gCubeTextureData_floorj; 
} 

,我已經試過

-(GLfloat[2]) createCubeTextureFromX1:(float)x1 toX2:(float)x2 toY1:(float)y1 andY2:(float)y2 { 
    return { 1.0, 1.0 }; 
} 

和這兩個不工作。第一個給我錯誤的函數,第二個給我錯誤的函數調用。這可能嗎?

+0

你用什麼語言呢?你有三種語言標記 –

+0

我的編譯器設置爲Objective-C++,所以我可以使用三種語言中的任何一種。不過,我更喜歡使用Objective-C(或Objective-C++),正如你可以從我的函數名中看到的那樣。 – michaellindahl

回答

0

In C, arrays are typically returned using pointers.

要在Objective-C正確做到這一點,我建議從你的方法返回一個NSArray的。

但是,GLFloats不是本機Objective-C對象,可以在NSArray中存儲目錄。爲了解決這個問題,我建議使用NSNumber或NSValue對象來包含你的GLfloat值。

+0

使用NSArray和NSNumber的問題是我需要然後使用glBufferData中的值,我不知道該怎麼做。 (OpenGL ES程序) – michaellindahl

+0

無論您插入到NSMutableArray中,您都可以通過「objectAtIndex:'」從另一端的(可變或不可變)NSArray中提取數據。一旦你熟悉Objective-C數組,它將變得更容易。 –

1

無法從函數,方法$ whatever初始化C數組。它只能用初始化列表初始化。 ISO/IEC 9899:TC3,§6.7.8,16. 「否則,具有聚集或聯合類型的對象的初始化程序應該是元素或已命名成員的大括號包含的初始化程序列表。

你可以做什麼:

而不是C數組使用指針。堆在創建函數或方法中分配數組並返回數組的指針。來電者負責釋放它。

+0

啊,另外:IIRC在C++中可以分配數組。但是我對C++的認識還很古老,我不知道細節。 –

0

爲什麼不使用C99複合字面值?

- (float[2])fooX:(float)x andY:(float)y 
{ 
    return (float[2]){ x, y }; 
} 
+0

這仍然給'數組初始化必須是一個初始化列表'eror – michaellindahl

+0

@michaellindahl [不,它不。](https://dl.dropboxusercontent.com/u/4960980/Screen%20Shot%202013-05- 15%20at%208.59.44%20 PM.png) – 2013-05-15 19:00:59

+0

它在初始化C數組時執行。 –