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

时间:2015-06-23 19:51:46

标签: c++ runtime directx directx-11

我正在研究DirectX应用程序,当我尝试运行时错误时,我遇到了将2个矩阵相乘的麻烦。如果我在我的标题中声明了矩阵,我只得到错误,如果我在函数中本地声明它可以正常工作。这不是我在应用程序中遇到此类错误的唯一地方。

GraphicClass.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
}

GraphicClass.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,但如果尝试使用旋转或翻译,我会得到运行时错误。

我正在使用visual studio 2015和最新的directx sdk运行Windows 8.1。 我希望我能够很好地解释这个问题,提前谢谢。

2 个答案:

答案 0 :(得分:3)

尝试定义构造函数,然后在里面初始化数据。要避免在..h文件中包含多个include include guards或使用#pragma once。

答案 1 :(得分:1)

我在这个帖子上找到了答案

Crash after m = XMMatrixIdentity() - aligment memory in classes?

“在书中”来自“Frank D. Luna”的Directx 11 3D游戏编程简介中它说:

不要将XMMATRIX用作类或结构的成员。如果需要,请始终使用XMFloat4x4并加载并存储。 “