0

私は最近、XMFloat4x4 および XMVector 変換を処理するマトリックス クラスを作成しました。Windows 8 Metro アプリでは問題なく動作していましたが、 Win32 Windows アプリケーションに移植しようとすると、エラーが発生し始めました。

"error C2593: 'operator *' is ambiguous c:\program files (x86)\windows kits\8.1\include\um\DirectXMathMisc.inl" 、およびオーバーロードされた複数のインスタンスに関連するこれらのエラーの多くがありました関数 XMFunctions

「DirectXMath.h」をインクルードすると問題が発生する

何が悪いのか教えてください

MATRIX4X4.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;
};
4

3 に答える 3

0

ファイルにがありusing namespace DirectX;ます.cppか? using namespace DirectX;ヘッダー ファイルにがないことを確認するか、する前に#include <DirectXMath.h>.

DirectX Tool KitSimpleMathも参照してください。

編集:XNAMath.hと の両方をDirectXMath.h同じアプリケーションに含めようとしていないことを確認してください。のみを使用してくださいDirectXMath.h

于 2015-08-13T20:45:56.463 に答える
-1

_XM_NO_INTRINSICS_そのため、含める前に定義する必要がありましたDirectXMath.h

#define _XM_NO_INTRINSICS_ 1;

詳細については、 https : //msdn.microsoft.com/en-us/library/windows/desktop/ee415579(v=vs.85).aspx を参照してください。

于 2015-08-14T15:18:08.637 に答える