未正确初始化的类结构数组

时间:2013-10-23 16:05:23

标签: c++ arrays directx directx-11

我正在开发一个简单的程序,我首先初始化一个VertexPos结构数组,每个结构在立方体的构造函数中都带有XMFLOAT3和XMFLOAT2。然后,RenderCube函数读取这些顶点并将多维数据集显示在屏幕上。

当我在RenderCube函数中声明一个数组(相同类型)时,我的代码完全正常,如下所示:

VertexPos vertices[] = {
            {XMFLOAT3( -1.0f,  1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f )},
...

问题是,当我尝试从立方体对象中读取顶点[]时,在下面定义和初始化(为简洁起见,下面仅定义了立方体的第一个顶点),在查看立方体时,我在调试器中看到了疯狂的值>顶点,例如:

cube->vertices[0].pos.x=5.736e-039#DEN

RenderCube():

bool Render::RenderCube(Cube* cube)
{
...
D3D11_SUBRESOURCE_DATA resourceData;
    ZeroMemory(&resourceData, sizeof(resourceData));
    resourceData.pSysMem = cube->vertices;
}

Cube.h

struct VertexPos
{
    XMFLOAT3 pos;
    XMFLOAT2 tex0;
    VertexPos(){}
    VertexPos(XMFLOAT3 p, XMFLOAT2 t)
    {
        pos = p;
        tex0 = t;
    }
};

class Cube
{
    public:
        Cube::Cube(LPCWSTR textureFileName);
        VertexPos vertices[NUMBER_OF_VERTICES];
        LPCWSTR getTextureFileName();

    private:
        LPCWSTR textureFileName;
};

Cube.cpp:

Cube::Cube(LPCWSTR textureFileName)
{
    //set texture
    this->textureFileName = textureFileName;
    vertices[0] = VertexPos(XMFLOAT3( -1.0f,  1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ));

}

LPCWSTR Cube::getTextureFileName(){
    return textureFileName;
}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要逐个初始化数组中的元素。例如:

VertexPos vertices[3] = {VertexPos(XMFLOAT3( -1.0f,  1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ))}

第一个元素顶点[0]将初始化为VertexPos(XMFLOAT3(-1.0f,1.0f,-1.0f),XMFLOAT2(0.0f,0.0f)),但其他元素将使用默认构造函数初始化,因为默认构造函数为空,所以你在结构中获得了垃圾内容。

答案 1 :(得分:1)

我终于得到了它 - 只使用了一个引用来初始化我的立方体向量,而不是一个新的立方体