包含minwindef.h后重新定义BOOL

时间:2019-01-09 14:32:58

标签: c++ c visual-c++

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

现在制作了一个C ++解决方案(Windows控制台应用程序),创建了一个文件夹lib的副本,并将所有.h.c文件粘贴到lib中,将路径添加到{{1 }}以及链接器additional include directories中。

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

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

additional library directories

但这与Windows工具包中的typedef uint8_t U8; #ifndef BOOL typedef U8 BOOL; #endif 冲突。尽管我minwindef.h得到#include types.h 在整个解决方案中,我要使用C2371 'BOOL': redefinition; different basic types的此定义以及此标头中定义的所有其他定义。

我应该如何解决该问题?或者通常,在C ++项目中使用C代码的情况下,应该遵循哪些设置和宏(例如方法中的extern“ C”)

1 个答案:

答案 0 :(得分:5)

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

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

这实际上与C vs C ++或类似的东西无关,并且没有可以进行的常规修复。您可以尝试摆脱Windows依赖性(您是否需要该标头来执行任务?),也可以修补库以免碰到BOOL(确保Windows BOOL是您所需要的)需要它。

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