【问题标题】:Redefinitions when #include-ing DirectXMath and DirectXTex#include-ing DirectXMath 和 DirectXTex 时的重新定义
【发布时间】:2019-07-05 04:47:08
【问题描述】:

使用VS2018Pro,Windows10,

在跨项目文件拉入 DirectXTex.h、DirectXMath.h 和 DirectXCollision.h 时,我遇到了许多重新定义编译错误。

DirectXMath 和 DirectXCollision 是 Win10SDK 标头的一部分,我从 github 存储库中提取了 DirectXTex 并将其放在我的项目文件夹的本地。

在我的代码库中,我需要在各种文件中包含 DirectXTex.h、DirectXMath.h 和 DirectXCollision.h 标头,但是我在 DirectX 命名空间中遇到了许多重新定义错误和重复项。我知道我可能必须先包含一个(我已经尝试了许多变体,例如 DirectXTex 引入了 DirectXMath),但我无法编译。

有人知道在项目文件中提取这些包含的正确顺序吗?

【问题讨论】:

  • 这些应该都可以正常工作。标头都使用#pragma once,所以它们不应该有重复。您可以发布这些错误之一的示例吗?
  • 确保您没有在任何地方使用xnamath.h...它与 DirectXMath 冲突。见this blog post
  • 嗨 Chuck,我根本没有使用 xnamath.h。假设我在 model.h 中包含 DirectXCollision.h 和 DirectXTex.h,并将 sprite.h 拉入 DirectXMath.h 和 DirectXTex 然后我得到错误..
  • 具体有哪些错误?
  • 天哪!周末休息后,我注意到我有一个我自己的头文件从你的 DirectXMath 存储库的克隆中提取 DirectXMath.h(我在项目开始时克隆了它),而我所有其他头文件都在提取 DirectXMath.h来自 Win10 SDK。在纠正了这个明显的错误之后,所有的编译都很好并且符合预期。如果我浪费了您的任何时间,我深表歉意。

标签: windows-10 direct3d11 directxmath visual-c++-2017


【解决方案1】:

解决方案是将项目头文件中的所有“#include DirectX*.h”头文件移动到 cpp 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 2011-02-17
    • 1970-01-01
    • 2010-11-24
    • 2012-09-07
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多