c++ - 参数没有正确传递

标签 c++ function directx direct3d

<分区>

我有一个类似下面的函数:

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”,它就可以工作...请帮忙。

最佳答案

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

因此函数中的 sizeof vertices 将是 sizeof Direct3DHelper::VERTEX*

您需要将数组的大小从创建它的地方传递到函数中。只有在创建它的范围内,大小才会占数组的整个大小。

我实际上建议使用类似 std::arraystd::vector 的东西。

关于c++ - 参数没有正确传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981122/

相关文章:

java - 如何在 Torcs 赛车游戏中安装世界锦标赛的机器人?

c++ - XML 解析问题

c++ - 如何将我的窗口投影为前台的事件窗口

c - 在C中添加公因数

c++ - 将图像加载到后台缓冲区/direct3d/c++

c++ - g++ 和 clang++ 变量模板和 SFINAE 的不同行为

r - 执行库(pkg)后执行包中的函数

c++ - 如何在 C++ 中实现传递函数的控制系统 block ?

c++ - 一种在没有光线转换和多个目标的情况下使用 3D 寻路的方法

c++ - 在C++/MFC中停止和启动DirectX声音合成器时弹出/单击