SC_HANDLE重定义
错误 C2371 “SC_HANDLE”: 重定义;不同的基类型 的核心原因在于,编译器在处理 diagnostic_demo.cpp 这个文件时,遇到了两个关于 SC_HANDLE 的定义,并且这两个定义的类型不兼容。
你提供的代码是 typedef void* SC_HANDLE;。这本身没有问题,但问题在于,在编译器看到你这一行代码之前,它已经通过某个被包含的头文件看到了另一个 SC_HANDLE 的定义。
问题根源:与 Windows SDK 的冲突
SC_HANDLE 是一个在 Windows 操作系统编程中非常常见的类型定义,它代表“Service Control Manager Handle”(服务控制管理器句柄)。
这个类型通常在 Windows 的头文件 winsvc.h 中定义,而 winsvc.h 又经常被更常见的 windows.h 所包含。
在 winsvc.h 中,它的定义通常是这样的:
C
虽然最终类型都是 void*,但编译器在处理 typedef 时,会认为 typedef void* SC_HANDLE; 和 typedef HANDLE SC_HANDLE; 是基于不同基类型的重定义,因此会报 C2371 错误。
你的项目路径中包含 C-V2X\SDK\Middleware,这表明你正在一个复杂的SDK环境中工作,这个环境极有可能为了实现某些功能(如系统服务、底层通信等)而包含了 windows.h。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。