gpt4 book ai didi

c++ - 结构类数组未正确初始化

转载 作者:行者123 更新时间:2023-11-28 03:06:31 24 4
gpt4 key购买 nike

我正在编写一个简单的程序,我首先初始化一个 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

渲染立方体():

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

立方体.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;
};

立方体.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;
}

我做错了什么?

最佳答案

您需要对数组中的元素进行一个一个的初始化。例如:

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

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

关于c++ - 结构类数组未正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19546783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com