二进制'-';:';DirectX::XMVECTOR';未定义此运算符或转换(从xnamath迁移到DirectXMath并不容易) 我有一些DirectX C++代码,使用了 xNAMATH.H./COD>。我想迁移到“全新”DirectXMath,所以我改变了: #include <xnamath.h>

二进制'-';:';DirectX::XMVECTOR';未定义此运算符或转换(从xnamath迁移到DirectXMath并不容易) 我有一些DirectX C++代码,使用了 xNAMATH.H./COD>。我想迁移到“全新”DirectXMath,所以我改变了: #include <xnamath.h>,c++,directx,directx-11,directxmath,xna-math-library,C++,Directx,Directx 11,Directxmath,Xna Math Library,我已经准备好面对麻烦了,他们来了 在编译过程中,我遇到了错误: error C2676: binary '-' : 'DirectX::XMVECTOR' does not define this operator or a conversion to a type acceptable to the predefined operator 对于适用于xnamth.h的行: DirectX::XMVECTOR RayDir = CursorObjectSpace - RayOrig

我已经准备好面对麻烦了,他们来了

在编译过程中,我遇到了错误

error C2676: binary '-' : 'DirectX::XMVECTOR' does not define this operator 
    or a conversion to a type acceptable to the predefined operator 
对于适用于
xnamth.h
的行:

DirectX::XMVECTOR RayDir = CursorObjectSpace - RayOrigin;
我真的不知道如何修复它。我不认为
操作符-
不再是“不受支持的”,但什么会导致该错误以及如何修复它呢

下面是更复杂的源代码:

DirectX::XMVECTOR RayOrigin = DirectX::XMVectorSet(cPos.getX(), cPos.getY(), cPos.getZ(), 0.0f); 
POINT mouse;
GetCursorPos(&mouse);

DirectX::XMVECTOR CursorScreenSpace = DirectX::XMVectorSet(mouse.x, mouse.y, 0.0f, 0.0f);

RECT windowRect;
GetWindowRect(*hwnd, &windowRect);
DirectX::XMVECTOR CursorObjectSpace = XMVector3Unproject( CursorScreenSpace, windowRect.left, windowRect.top, screenSize.getX(), screenSize.getY(), 0.0f, 1.0f, XMLoadFloat4x4(&activeCamera->getProjection()), XMLoadFloat4x4(&activeCamera->getView()), DirectX::XMMatrixIdentity());

DirectX::XMVECTOR RayDir = CursorObjectSpace - RayOrigin;
我正在使用Windows7x64,项目目标是x32调试,到目前为止它在
xnamath.h
上运行良好


工作解决办法是:

DirectX::XMVECTOR RayDir = DirectX::XMVectorSet( //write more, do less..
    DirectX::XMVectorGetX(CursorObjectSpace) - DirectX::XMVectorGetX(RayOrigin),
    DirectX::XMVectorGetY(CursorObjectSpace) - DirectX::XMVectorGetY(RayOrigin),
    DirectX::XMVectorGetZ(CursorObjectSpace) - DirectX::XMVectorGetZ(RayOrigin),
    DirectX::XMVectorGetW(CursorObjectSpace) - DirectX::XMVectorGetW(RayOrigin)
); //oh my God, I'm so creepy solution
但与之前的工作相比,这太令人毛骨悚然了,为xnamath工作

    XMVECTOR RayDir = CursorObjectSpace - RayOrigin;
我真的不相信这是唯一的方法,我不能像上面那样只使用
操作符-


对于
操作符/
我也有完全相同的问题,XMVector的减法和除法操作符没有重载,因为XMVector不是一个类-它是用于SSE操作的u m128数据类型的typedef

在升级到DirectXMath的过程中,微软打算通过使向量操作具有“SSE功能”来加速向量操作。他们还提供了XMVectorSubtract等函数,让您在执行算术运算时使用SSE


您可以在这里找到更多信息:

XMVector的减法和除法运算符没有重载,因为XMVector不是类-它是用于SSE操作的u m128数据类型的typedef

在升级到DirectXMath的过程中,微软打算通过使向量操作具有“SSE功能”来加速向量操作。他们还提供了XMVectorSubtract等函数,让您在执行算术运算时使用SSE


您可以在这里找到更多信息:

XMVector的减法和除法运算符没有重载,因为XMVector不是类-它是用于SSE操作的u m128数据类型的typedef

在升级到DirectXMath的过程中,微软打算通过使向量操作具有“SSE功能”来加速向量操作。他们还提供了XMVectorSubtract等函数,让您在执行算术运算时使用SSE


您可以在这里找到更多信息:

XMVector的减法和除法运算符没有重载,因为XMVector不是类-它是用于SSE操作的u m128数据类型的typedef

在升级到DirectXMath的过程中,微软打算通过使向量操作具有“SSE功能”来加速向量操作。他们还提供了XMVectorSubtract等函数,让您在执行算术运算时使用SSE


您可以在此处找到更多信息:

Microsoft在DirectXMathVector.inl头中提供运算符重载,该头包含在DirectXMath.h的末尾。但是,为了能够使用它,您必须在尝试使用该操作符的范围内具有“using namespace DirectX”

例如:

void CalculateRayDirection(const DirectX::XMVECTOR& rayOrigin, DirectX::XMVECTOR& rayDirection)
{
    using namespace DirectX;

    POINT mouse;
    GetCursorPos(&mouse);
    XMVECTOR CursorScreenSpace = XMVectorSet(mouse.x, mouse.y, 0.0f, 0.0f);

    rayDirection = CursorObjectSpace - rayOrigin;
}

Microsoft在DirectXMathVector.inl标头中提供运算符重载,该标头包含在DirectXMath.h的末尾。但是,为了能够使用它,您必须在尝试使用该操作符的范围内具有“using namespace DirectX”

例如:

void CalculateRayDirection(const DirectX::XMVECTOR& rayOrigin, DirectX::XMVECTOR& rayDirection)
{
    using namespace DirectX;

    POINT mouse;
    GetCursorPos(&mouse);
    XMVECTOR CursorScreenSpace = XMVectorSet(mouse.x, mouse.y, 0.0f, 0.0f);

    rayDirection = CursorObjectSpace - rayOrigin;
}

Microsoft在DirectXMathVector.inl标头中提供运算符重载,该标头包含在DirectXMath.h的末尾。但是,为了能够使用它,您必须在尝试使用该操作符的范围内具有“using namespace DirectX”

例如:

void CalculateRayDirection(const DirectX::XMVECTOR& rayOrigin, DirectX::XMVECTOR& rayDirection)
{
    using namespace DirectX;

    POINT mouse;
    GetCursorPos(&mouse);
    XMVECTOR CursorScreenSpace = XMVectorSet(mouse.x, mouse.y, 0.0f, 0.0f);

    rayDirection = CursorObjectSpace - rayOrigin;
}

Microsoft在DirectXMathVector.inl标头中提供运算符重载,该标头包含在DirectXMath.h的末尾。但是,为了能够使用它,您必须在尝试使用该操作符的范围内具有“using namespace DirectX”

例如:

void CalculateRayDirection(const DirectX::XMVECTOR& rayOrigin, DirectX::XMVECTOR& rayDirection)
{
    using namespace DirectX;

    POINT mouse;
    GetCursorPos(&mouse);
    XMVECTOR CursorScreenSpace = XMVectorSet(mouse.x, mouse.y, 0.0f, 0.0f);

    rayDirection = CursorObjectSpace - rayOrigin;
}

你确定
CursorObjectSpace
RayOrigin
都是
DirectX::XMVECTOR
类型吗?我100%确定,我也发布了复杂的代码,在那里你可以看到
CursorObjectSpace
RayOrigin
的声明。你可以明智地使用,这要简单得多。谢谢你告诉我SimpleMath,但我仍然在寻找DirectXMath的解决方案,我觉得这并不难(除了操作符问题…)。无论如何,我只在少数情况下使用它,只想从xnamath迁移到它。你确定
CursorObjectSpace
RayOrigin
都属于
DirectX::XMVECTOR
类型吗?我100%确定,我也发布了复杂的代码,在这里,您可以看到
CursorObjectSpace
RayOrigin
的声明。您可能会明智地使用它,它会更简单。感谢您讲述SimpleMath,但我仍然在寻找DirectXMath的解决方案,我并不觉得它太难(除了运算符问题…)。无论如何,我只在少数情况下使用它,只想从xnamath迁移到它。你确定
CursorObjectSpace
RayOrigin
都属于
DirectX::XMVECTOR
类型吗?我100%确定,我也发布了复杂的代码,在这里,您可以看到
CursorObjectSpace
RayOrigin
的声明。您可能会明智地使用它,它会更简单。感谢您讲述SimpleMath,但我仍然在寻找DirectXMath的解决方案,我并不觉得它太难(除了运算符问题…)。无论如何,我只在少数情况下使用它,只想从xnamath迁移到它。你确定
CursorObjectSpace
RayOrigin
都属于
DirectX::XMVECTOR
类型吗?我100%确定,我也发布了复杂的代码,在这里,您可以看到
CursorObjectSpace
RayOrigin
的声明。您可能会明智地使用它,因为它更简单。感谢您的telli