将变量移动到头文件时出现运行时错误



我正在开发DirectX应用程序,在将2个矩阵相乘时遇到了一些问题,当我尝试时,我遇到了运行时错误。只有当我在头中声明矩阵时,我才会得到错误,如果我在函数中本地声明它们,它会正常工作。这并不是应用程序中唯一出现此类错误的地方。


图形类.cpp

void GraphicClass::UpdateScene()
{
    Cube1World = DirectX::XMMatrixIdentity();
    DirectX::XMVECTOR rotaxis = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
    Rotation = DirectX::XMMatrixRotationAxis(rotaxis, rot);
    Translation = DirectX::XMMatrixTranslation(0.0f, 0.0f, 4.0f);
    Cube1World = Translation * Rotation; //I get run time error on this line
}

图形类.h

class GraphicClass{
    DirectX::XMMATRIX Cube1World;
    DirectX::XMMATRIX Rotation;
    DirectX::XMMATRIX Translation;
    float rot = 0.01f;
    //other Code
}

错误消息

Unhandled exception at 0x002F4C0F in Engine.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF.

我可以在头文件中声明Cube1World,但如果我尝试使用Rotation或Translation,我会得到运行时错误。

我正在运行windows 8.1和visual studio 2015以及最新的directx sdk。我希望我把这个问题解释得足够好,提前谢谢。

尝试定义一个构造函数,然后初始化里面的数据。为了避免多个include,请在*.h文件中定义include保护或使用#pragma一次。

我在这个线程上找到了答案

m=XMMatrixIdentity()后崩溃-类中的内存对齐?

在"Frank D.Luna"的"Directx 11 3D游戏编程简介"一书中,它说:

不要将XMMIX用作类或结构的成员。请始终使用XMFloat4x4,并在需要时加载和存储。"

最新更新