DirectXMath.h运算符不明确



我最近写了一个矩阵类来处理XMFloat4x4和XMVector转换。它在windows 8 metro应用程序上运行得很好,但当我试图将它移植到Win32 windows应用程序时,它开始出现错误

"错误C2593:'operator*'不明确c:\program files(x86(\windows kits\8.1\include\um\DirectXMathMisc.inl">,并且有很多这样的错误与多个重载函数XMFunctions实例有关

包含"DirectXMath.h">时,会出现问题

请告诉我出了什么问题

MIX4X4.h

#pragma once
#include <btBulletCollisionCommon.h>
#include <cmath>
#include <DirectXMath.h>
using namespace DirectX;
#define _USE_MATH_DEFINES
class MATRIX4X4
{
private:
    XMFLOAT4X4 _m;
public:
    MATRIX4X4();
    MATRIX4X4(const XMFLOAT4X4 &data);
    MATRIX4X4(float* data);
    void InitializeIdentity();
    MATRIX4X4& InitTranslation(float x, float y, float z);
    MATRIX4X4& InitTranslation(const XMFLOAT3 &pos);
    MATRIX4X4& InitScaling(float x, float y, float z);
    MATRIX4X4& InitScaling(const XMFLOAT3 &scl);
    MATRIX4X4& InitRotation(float x, float y, float z);
    MATRIX4X4& InitRotation(const XMVECTOR &quaternion);
    MATRIX4X4& InitPerspective(float minimumFieldOfView, float aspectRatio, float nearPlane, float farPlane);
    MATRIX4X4& InitOrthographic(float left, float right, float bottom, float top, float nearPlane, float farPlane);
    MATRIX4X4& InitView(const XMFLOAT3 &eyePosition, const XMFLOAT3 &lookPosition, const XMFLOAT3 &up);
    MATRIX4X4& SetTranslation(float x, float y, float z);
    MATRIX4X4& SetTranslation(const XMFLOAT3 &pos);
    MATRIX4X4& Translate(float dx, float dy, float dz);
    MATRIX4X4& Translate(const XMFLOAT3 &dp);
    MATRIX4X4& SetScale(float x, float y, float z);
    MATRIX4X4& SetScale(const XMFLOAT3 &scl);
    MATRIX4X4& Scale(float dx, float dy, float dz);
    MATRIX4X4& Scale(const XMFLOAT3 &ds);
    MATRIX4X4& SetRotation(float x, float y, float z);
    MATRIX4X4& SetRotation(const XMFLOAT3 &rot);
    MATRIX4X4& SetRotation(const XMVECTOR &quaternion);
    MATRIX4X4& Rotate(float dx, float dy, float dz);
    MATRIX4X4& Rotate(const XMFLOAT3 &dr);
    MATRIX4X4& Rotate(const XMVECTOR &quaternion);
    MATRIX4X4& operator* (MATRIX4X4 mat);
    MATRIX4X4& operator*= (MATRIX4X4 mat);
    void LookAt(const XMFLOAT3& position, const XMFLOAT3& target, const XMFLOAT3& up);
    // for bulllet physics //
    MATRIX4X4& Translate(const btVector3 &dp);
    MATRIX4X4& SetTranslation(const btVector3 &pos);
    MATRIX4X4& Scale(const btVector3 &ds);
    MATRIX4X4& SetScale(const btVector3 &scl);
    MATRIX4X4& Rotate(const btQuaternion &quaternion);
    MATRIX4X4& SetRotation(const btQuaternion &quaternion);
    /////////////////////////
    const XMFLOAT4X4& GetData() const;
    const XMFLOAT3& GetTranslation() const;
    const XMFLOAT3& GetScale() const;
    const XMVECTOR& GetRotation() const;
};

您的.cpp文件中有using namespace DirectX;吗?确保头文件中没有using namespace DirectX;,或者在执行#include <DirectXMath.h>之前。

您可能还想看看DirectX工具包中的SimpleMath。

编辑:请确保您没有试图在同一应用程序中同时包含XNAMath.hDirectXMath.h。您应该只使用DirectXMath.h

吊杆:

#define BT_NO_SIMD_OPERATOR_OVERLOADS

(来自https://social.msdn.microsoft.com/Forums/sqlserver/en-US/5d85c350-f5cc-46c5-9924-0b07d1cd674e/directxmathh-operator-ambiguity?forum=windowssdk,我想你已经得到了答案?:(我将把它留在这里供参考,(

xm-no-intrinsics破解帮了我一把。

我认为问题实际上是#include <btBulletCollisionCommon.h>

我刚刚在自己的项目中加入了bullet,我开始出现同样的错误。我确实有#using namespace DirectX

你没有显示消息的其余部分,但对我来说,完整的错误是:

1> c:\users\germain\documents\work\pp\editor\camero.h(27(:错误C2593:"operator+"不明确1> c:\users\germain\documents\work\pp\physics\src\bulletdynamics\constraintsolver\btsolverbody.h(97(:注意:可以是"btSimdScalar运算符+(const btSimdScalar&,const btSimdScalar&"1> c:\users\germain\documents\work\pp\pphysics\src\linermath\btmatrix3.h(858(:注意:或'btMatrixx3运算符+(const btMatrix3&,const btmatrix3&aamp;('1> c:\users\germain\documents\work\pp\pphysics\src\linermath\btvector3.h(765(:注意:或'btvector3运算符+(const btvector3&,const btvector3&aamp;('1> c:\users\germain\documents\work\pp\pphysics\src\linermath\btscal.h(323(:注意:或'__m128运算符+(const __m128,const __M12 8('1> c:\program files(x86(\windows kits\8.1\include\um\directxmathvector.inl(13945(:注意:或"DirectX::XMVECTOR DirectX::operator+(DirectX::FXMVECTOR,DirectX:::FXMVPECTOR("1> c:\users\germain\documents\work\pp\editor\camero\camero.h(27(:注意:在尝试匹配参数列表"(const DirectX::XMVECTOR,const DirectC::XMVECTOR("时

所以这似乎是有道理的。项目符号中的#define BT_NO_SIMD_OPERATOR_OVERLOADS是不污染命名空间的方法,

所以我只需要在包含DirectXMath.h 之前定义_XM_NO_INTRINSICS_

#define _XM_NO_INTRINSICS_ 1;

有关详细信息:https://msdn.microsoft.com/en-us/library/windows/desktop/ee415579(v=vs.85(.aspx

相关内容

  • 没有找到相关文章

最新更新