2015-10-06 4 views
1

У меня есть функция, как следующее:Параметр не проходит правильно

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 (вершины) не дает мне правильное значение, или что-то. Это то, что я ввода:

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,» это работает ... Пожалуйста, помогите.

+1

Обратите внимание, что [Clang] (http://coliru.stacked-crooked.com/a/472ac49e538386e6) и [GCC] (http://coliru.stacked-crooked.com/a/489c2b99c1856a4f) предупреждают об этом , – chris

ответ

1

Использование синтаксиса [] не означает, что вы передаете массив. Он по-прежнему является указателем, что делает его еще более запутанным.

Таким образом, размер vertices в вашей функции будет sizeof Direct3DHelper::VERTEX*.

Вам нужно передать размер массива в функцию, из которой он был создан. Только в области, где он был создан, будет учитываться размер для всего размера массива.

Я бы рекомендовал использовать что-то вроде std::array или std::vector.

+0

Не могли бы вы показать пример? Это моя структура, между прочим: struct VERTEX \t { \t \t float x, y, z, rhw; \t \t DWORD цвет; \t}; – oliveryas01

+0

Я новичок в C++, исходя из Java, это совсем другое. – oliveryas01

+0

Никогда не думал об этом. Спасибо за помощь. – oliveryas01