参数没有正确传入

Parameter not passing in correctly

本文关键字:参数      更新时间:2023-10-16

我有一个像这样的函数:

void Direct3DRenderer::CreatePrimitive(char *name, Direct3DHelper::VERTEX vertices[])
{
    LPDIRECT3DVERTEXBUFFER9 vertex_buf;
    d3d_dev->CreateVertexBuffer(4 * sizeof(Direct3DHelper::VERTEX), 0, Direct3DHelper::FVF, D3DPOOL_MANAGED, &vertex_buf, NULL);
    VOID *pVoid;
    vertex_buf->Lock(0, 0, (void**)&pVoid, 0);
    memcpy(pVoid, vertices, sizeof(vertices));
    vertex_buf->Unlock();
    primitiveMap[name] = vertex_buf;
}

由于某些原因,sizeof(vertices)没有给我正确的值,或者别的什么。这就是我输入的:

Direct3DHelper::VERTEX verticesA[] =
{
    { 0, 0, 0, 1, D3DCOLOR_XRGB(255, 0, 0) },
    { 10, 0, 0, 1, D3DCOLOR_XRGB(0, 255, 0) },
    { 0, 10, 0, 1, D3DCOLOR_XRGB(255, 255, 0) },
    { 10, 10, 0, 1, D3DCOLOR_XRGB(0, 0, 255) }
};

如果我不把它传递给函数,只是用"verticesA"替换所有的"顶点",它工作…请帮助。

使用[]语法并不意味着您正在传递一个数组。它仍然是一个指针,这使得使用起来更加混乱。

函数中vertices的sizeof等于Direct3DHelper::VERTEX*的sizeof

您需要将数组的大小从创建它的地方传递给函数。只有在创建它的作用域中,size才会占到数组的整个大小。

我实际上建议使用std::arraystd::vector