包含 minwindef.h 后的 BOOL 重新定义
BOOL redefinition after including minwindef.h
我是 C/C++ 的新手,以防万一:)我已经克隆了一个用 C 编写的旧协议栈解决方案,其中包含一个主类C++将其导入 VS(Visual C++ 2017 v 15.9.5 面向 Windows SDK 10.0.17134.0) 它编译正确且正常工作。
现在做了一个C++解决方案(Windows控制台应用程序)创建了一个文件夹lib
将所有这些.h
和.c
文件复制粘贴到lib
添加了additional include directories
路径以及链接器additional library directories
。
构建解决方案抛出错误音调。 我现在正在尝试修复的是:
其中一个头文件包含类型定义
typedef uint8_t U8;
#ifndef BOOL
typedef U8 BOOL;
#endif
但这与Windows Kit中的minwindef.h
冲突。 虽然我#include types.h
得到C2371 'BOOL': redefinition; different basic types
在整个解决方案中,我想使用此 BOOL
定义以及此标头中定义的所有其他定义。
我应该如何解决问题?或者一般来说,如果在项目中使用 C 代码C++我应该遵循哪些设置和宏(例如方法中的外部"C")
我对你尝试使用的库一无所知,因为你没有告诉我们它是什么。但我可以做一些猜测:
- 该代码根本没有用于与 Windows 代码交互;
- 通过创建 Windows C++ 应用程序,您已经添加了 Windows 依赖项;
- Windows 依赖项(以用
BOOL
等短名称毒害命名空间而闻名)与库的代码冲突(如果定义时,库的代码对其BOOL
宏及其BOOL
类型别名执行相同的操作,否则)。
这与 C 与 C++ 或类似的东西无关,并且您无法进行常规修复。你可以尝试摆脱Windows依赖关系(你的任务需要这个标题吗?),或者你可以修补你的库,不要碰BOOL
(在确保Windows的BOOL
是你需要的之后)。
并以此为一个很好的教训,不要污染命名空间!
相关文章:
- 在类定义之后定义一个私有方法
- Android Studio:如何在build.gradle中定义自定义宏(针对不同的构建变体),并让原生C / C++
- 如何在C++中为 if 和 else 语句定义新行为
- 如何从 C++ 中的现有模板函数定义新函数
- 如何在CPropertySheet中定义新颜色
- 谁定义新操作员
- boost :: fibonacci_heap:带有比较器重新定义圆形定义错误的嵌套定义
- C 通过Typedef定义新类型
- 在 ss.clear() 之后使用 ss.str( " ") 用于新定义的字符串流
- 是标头文件中使用“新”定义的成员指针泄漏
- 使用带有Eigen库的自定义新处理程序
- 定义新的优化类型
- C# 如何定义新的指针结构
- 为模型定义新角色后程序崩溃
- C++使用类来定义新类型
- 操作员新[]定义分解
- 为什么不调用复制构造函数将临时对象复制到新定义的对象
- Qt:在按钮点击上添加自定义新选项卡
- 定义新的中缀操作符
- 错误:不能在返回类型中定义新类型