&D3DXVECTOR3 导致错误 C2102“&”需要左值

时间:2021-03-11 12:14:24

标签: direct3d9

第一次来。 我尝试使用 direct3d 9 函数移动 .png 文件:&D3DXVECTOR3 但是当我运行本地 Windows 调试器时,它显示“&”需要 l 值错误。我尝试使用 direct3d9 搜索类似案例,但一无所获。我想知道错误的原因是什么,我该如何解决。

sprite->Draw(pointer, NULL, NULL, &D3DXVECTOR3(32, 32, 0), D3DCOLOR_XRGB(255, 255, 255));

我一开始使用 NULL 而不是 D3DXVECTOR3,它运行得很好,但是当更改为 D3DXVECTOR3 时,它显示错误。

1 个答案:

答案 0 :(得分:1)

像这样获取临时对象的地址不符合 C++ 标准。

Microsoft Visual C++ 历来接受这种用法作为“语言扩展”,除非您在构建时启用 /permissive-(即一致性模式),否则它仍然如此。没有 /permissive-,在警告级别 4 时,它仍会发出 C4238 警告。

clang/LLVM for Windows 也将接受这种用法,但会输出 -Waddress-of-temporary 警告。

一致的解决方案是创建一个命名的临时:

D3DXVECTOR3 v(32, 32, 0);
sprite->Draw(pointer, NULL, NULL, &v, D3DCOLOR_XRGB(255, 255, 255));
<块引用>

您应该注意,您使用的是旧版 Direct3D 9、deprecated D3DX9 library 和已弃用的 D3DXMath 库。见Microsoft Docs。现在,建议改用 Direct3D 11、DirectXMathDirectX Tool Kit SpriteBatch

相关问题