我是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
Run Code Online (Sandbox Code Playgroud)
但这与minwindef.hWindows套件相冲突.虽然我#include types.h得到C2371 'BOOL': redefinition; different basic types
了整个解决方案,但我想使用BOOL此标头中定义的所有其他定义.
我该如何解决这个问题?或者一般情况下,如果在C++项目中使用C代码,我应该遵循哪些设置和MACRO(例如方法中的extern"C")
我对你想要使用的图书馆一无所知,因为你没有告诉我们它是什么.但我可以做一些猜测:
BOOL)与库的代码(BOOL在定义时对其宏执行相同的操作BOOL,否则与其类型别名相同)发生冲突.这与C vs C++或类似的东西没有什么关系,并且你无法做出一般修复.您可以尝试摆脱Windows依赖关系(您的任务需要该标题吗?)或者您可以修补您的库不要触摸BOOL(确保Windows BOOL是您需要的).
并将此作为一个不污染命名空间的好教训!
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |