gpt4 book ai didi

c++ - 包含 minwindef.h 后的 BOOL 重新定义

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:33 26 4
gpt4 key购买 nike

我是 C/C++ 的新手,以防万一:)我克隆了一个用 C 编写的旧协议(protocol)栈解决方案,其中一个 C++ 主类将其导入 VS(针对 Windows SDK 10.0.17134.0 的 Visual C++ 2017 v 15.9.5)它已正确编译并正常工作。

现在制作了一个 C++ 解决方案(windows 控制台应用程序),创建了一个文件夹 lib,将所有这些 .h.c 文件复制粘贴到 lib 将路径添加到 additional include directories 以及链接器 additional library directories 中。

构建解决方案抛出错误提示音。我现在要修复的是:

其中一个头文件包含类型定义

typedef uint8_t U8;
#ifndef BOOL
typedef U8 BOOL;
#endif

但这与 Windows 工具包中的 minwindef.h 冲突。虽然我 #include types.h 得到 C2371 'BOOL': redefinition;不同的基本类型在整个解决方案中,我想使用 BOOL 的这个定义以及此 header 中定义的所有其他定义。

我该如何解决这个问题?或者一般来说,如果在 C++ 项目中使用 C 代码,我应该遵循哪些设置和 MACRO(例如方法中的 extern "C")

最佳答案

我对您尝试使用的库一无所知,因为您没有告诉我们它是什么。但我可以做出一些猜测:

  1. 该代码根本不用于与 Windows 代码交互;
  2. 通过创建 Windows C++ 应用程序,您已经添加了 Windows 依赖项;
  3. Windows 依赖项(以使用诸如 BOOL 之类的短名称毒害命名空间而闻名)与库的代码冲突(后者对其 BOOL 做同样的事情)宏,定义时,及其 BOOL 类型别名,否则)。

这实际上与 C vs C++ 或类似的东西无关,并且您无法进行一般性修复。您可以尝试摆脱 Windows 依赖性(您的任务需要该 header 吗?)或者您可以修补您的库以使其不接触 BOOL(在确保 Windows 的 BOOL 是您需要的)。

并将此作为一个很好的教训,不要污染命名空间!

关于c++ - 包含 minwindef.h 后的 BOOL 重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54112438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com