-1

我有一个 typdef 结构,如下所示:

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 *' 类型的参数会丢弃限定符

似乎我不能让它按我的意愿工作。有什么建议么?

4

1 回答 1

0

Vertex被定义为一个const结构。的getValue:方法NSValue需要一个指向非const内存的指针,它可以在其中写入其值。当然,因为Vertex被定义为结构体,所以通过取消引用的指针const访问的内存不能被写入。Vertex *

“丢弃限定符”警告(我怀疑它不是真正的错误,除非您在编译-Wall器标志打开的情况下进行编译)特别表明您正在尝试传递一个预期const非一个对象。关键字是 C 术语中的const类型限定符const

于 2013-08-02T06:24:37.553 回答