2013-08-02 66 views
-1

我有一個typdef結構如下所示:C-結構來的NSArray

typedef struct { 
    float Position[3]; 
    float Color[4]; 
    float TexCoord[2]; 
} const Vertex; 

我創建一個轉換器,我傳的位置,顏色和TexCoord成單獨的NSArray:

+ (void)arrayConverter: (Vertex *) v 
{ 

    // Turn typeDef struct into seperate arrays 
    NSValue *positionData = [NSValue valueWithBytes:&v->Position objCType:@encode(Vertex)]; 
    NSArray *positionArray = [NSArray arrayWithObjects:positionData, nil]; 

    [positionData getValue:&v->Position]; // where I get error 

    NSMutableDictionary *vertexdata = [[NSMutableDictionary alloc] init]; 
    [vertexdata setObject:positionArray forKey:@"Position"]; 

    NSLog(@"\n Vertex data: %@\n",vertexdata); 

} 

我正在通過的頂點:

const Vertex Iso_Vertices[] = { 
    {{ -X, 0.0, Z }, {1, 0, 0, 1}, {1, 0}}, 
    {{ X, 0.0, Z }, {0, 1, 0, 1}, {1, 1}}, 
    {{ -X, 0.0, -Z }, {0, 0, 1, 1}, {0, 1}}, 
    {{ X, 0.0, -Z }, {0, 0, 0, 1}, {0, 0}}, 
    {{ 0.0, Z, X }, {1, 0, 0, 1}, {0, 1}}, 
    {{ 0.0, Z, -X }, {0, 1, 0, 1}, {1, 0}}, 
    {{ 0.0, -Z, X }, {0, 0, 1, 1}, {0, 0}}, 
    {{ 0.0, -Z, -X }, {0, 0, 0, 1}, {1, 1}}, 
    {{ Z, X, 0.0 }, {1, 0, 0, 1}, {1, 0}}, 
    {{ -Z, X, 0.0 }, {0, 1, 0, 1}, {1, 1}}, 
    {{ Z, -X, 0.0 }, {0, 0, 1, 1}, {0, 1}}, 
    {{ -Z, -X, 0.0 }, {0, 0, 0, 1}, {0, 0}}, 
}; 

這個錯誤是什麼意思? 發送'float const(*)[3]到類型'void *'的參數丟棄限定符

看起來好像我可以得到這個工作,我想如何。有什麼建議麼?

+1

爲什麼要做'&v->位置?只需使用'v'。即'[positionData getValue:v];' –

+1

這意味着NSArray需要一個_non-const_參數,而您傳入​​的數據被限定爲_const_。你可以拋棄常量:插入一個強制類型'(void *)'。但也許考慮trojanfoe的回答 – nielsbot

+0

這是非常基本的。我建議你閱讀1.一本好的入門C書,2.你正在使用的特殊'NSValue'方法的文檔。如果你已經完成了這兩個任務,或者最好是這兩個,你就不必問這個問題。 – 2013-08-02 06:26:16

回答

1

Vertex被定義爲const結構。 的方法NSValue需要一個指向非const內存的地方,它可以在處寫它的值。當然,因爲Vertex被定義爲const結構體,所以通過取指的Vertex *指針訪問的存儲器可以被而不是被寫入。

的「丟棄的限定」警告(我懷疑,除非你有打開了-Wall編譯器標誌編譯它不是一個真正的錯誤)明確表明您試圖通過一個const對象,其中非const之一是預期。 const關鍵字是C術語中的類型限定符