错误 C2365 “SID”: 重定义;以前的定义是“typedef”
问题描述
enum FinsCommandField : unsigned char
{...SID,
};...mCmdFins[SID] = 0x01; // 09 SID Service ID
错误 C2365:“SID”: 重定义;以前的定义是“typedef”
这是 MSVC 编译器(Visual Studio) 报出的一个典型错误,表示标识符 SID
被重复定义了两次:
第一次被定义为一个 typedef(可能是某种结构体或类型的别名)
第二次又被用作其他东西(比如变量、枚举值、宏等)
原因分析:
常见情况如下:
Windows SDK
中定义了 SID
SID
是 Windows
安全相关类型(Security Identifier),在头文件如 <winnt.h>
或 <windows.h>
中定义:
typedef struct _SID SID, *PISID;
如果你在自己的代码中又写了:
int SID; // 或者 enum { SID = ... };
就会报错:C2365:重定义,之前的定义是 typedef
解决方案:
修改变量名为SerID
或 使用命名空间或类作用域封装 SID
enum FinsCommandField : unsigned char
{...SerID,
};...mCmdFins[SerID] = 0x01; // 09 SID Service ID