我是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”)
答案 0 :(得分:5)
对于您要使用的库,我一无所知,因为您没有告诉我们它是什么。但我可以做出一些猜测:
BOOL
之类的短名称毒害名称空间)与库的代码(定义时,其库的BOOL
宏在做同样的事情,并且其BOOL
类型别名,否则)。这实际上与C vs C ++或类似的东西无关,并且没有可以进行的常规修复。您可以尝试摆脱Windows依赖性(您是否需要该标头来执行任务?),也可以修补库以免碰到BOOL
(确保Windows BOOL
是您所需要的)需要它。
并以此作为一个很好的教训,不要污染名称空间!