- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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")
最佳答案
我对您尝试使用的库一无所知,因为您没有告诉我们它是什么。但我可以做出一些猜测:
BOOL
之类的短名称毒害命名空间而闻名)与库的代码冲突(后者对其 BOOL
做同样的事情)宏,定义时,及其 BOOL
类型别名,否则)。这实际上与 C vs C++ 或类似的东西无关,并且您无法进行一般性修复。您可以尝试摆脱 Windows 依赖性(您的任务需要该 header 吗?)或者您可以修补您的库以使其不接触 BOOL
(在确保 Windows 的 BOOL
是您需要的)。
并将此作为一个很好的教训,不要污染命名空间!
关于c++ - 包含 minwindef.h 后的 BOOL 重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54112438/
这些在 minwindef.h 中定义(通常位于 Program Files (x86)\Windows Kits\8.1\Include\shared\minwindef.h) #ifndef IN
我是 C/C++ 的新手,以防万一:)我克隆了一个用 C 编写的旧协议(protocol)栈解决方案,其中一个 C++ 主类将其导入 VS(针对 Windows SDK 10.0.17134.0 的
这个问题在这里已经有了答案: How to call std::min() when min has been defined as a macro? (5 个答案) warning C4003:
我是一名优秀的程序员,十分优秀!