Как привести void * к float (*) [3] в c ++? - PullRequest
2 голосов
/ 03 октября 2011

Это фрагмент кода.

typedef struct Lib3dsMesh {
 //..
 float (*vertices)[3]; 
 //..
}


void* lib3ds_util_realloc_array(void *ptr, int old_size, int new_size, int  element_size) {
    // Do something here.
    return ptr;
}


mesh->vertices = lib3ds_util_realloc_array(mesh->vertices, mesh->nvertices, nvertices, 3 * sizeof(float));

Когда я компилирую этот код в Visual C ++, он возвращает ошибку «Не удается преобразовать из void * в float (*) [3]».

Я хотел бы знать, как разыгрывать void * to float (* vertices) [3];

1 Ответ

8 голосов
/ 03 октября 2011

vertices - это указатель на массив из 3 элементов float.Чтобы выполнить приведение от одного типа указателя к другому, вы обычно используете static_cast:

void* result = lib3ds_util_realloc_array(
    mesh->vertices, mesh->nvertices, nvertices, 3 * sizeof(float));
mesh-vertices = static_cast<float (*)[3]>(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...