error C2371: “DWORD”: 重定义;不同的基类型

在使用Qt开发过程中,遇到自定义枚举类型与Windows头文件winioctl.h中预定义宏DEVICE_TYPE冲突的问题。本文详细介绍了冲突的原因及解决方法,通过取消宏定义成功避免了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用Qt过程中,由于项目需要定义了一个枚举类型:

enum DEVICE_TYPE {//设备类别
	DEVICE_TYPE__CO,	
	DEVICE_TYPE__CO_J,
	DEVICE_TYPE__CO_S,			
	DEVICE_TYPE__RD,	
}

但是在编译的时候就出现了以上的错误:

 “DWORD”: 重定义;不同的基类型

原因:由于调用window中的头文件,在文件winioctl.h中定义了
在这里插入图片描述
和项目中定义的枚举类型DEVICE_TYPE 出现了冲突。

解决方法:
添加上取消宏定义的方法即可。

//添加上一下三行
#ifdef DEVICE_TYPE
#undef DEVICE_TYPE
#endif // DEVICE_TYPE

enum DEVICE_TYPE {//设备类别
	DEVICE_TYPE__CO,	
	DEVICE_TYPE__CO_J,
	DEVICE_TYPE__CO_S,			
	DEVICE_TYPE__RD,	
}

aaa

已启动重新生成… 1>------ 已启动全部重新生成: 项目: DLL代码执行, 配置: Release Win32 ------ 1>cl : 命令行 warning D9035: “Gm”选项已否决,并将在将来的版本中移除 1>cl : 命令行 warning D9007: “/Gm”需要“/Zi 或 /ZI”;选项被忽略 1>MemoryModule.c 1>cl : 命令行 warning D9035: “Gm”选项已否决,并将在将来的版本中移除 1>cl : 命令行 warning D9007: “/Gm”需要“/Zi 或 /ZI”;选项被忽略 1>DLL代码执行.cpp 1>DLL代码执行.cpp(1218,21): error C2011: “EncryptedURL”:“struct”类型重定义 1>DLL代码执行.cpp(1191): message : 参见“EncryptedURL”的声明 1>DLL代码执行.cpp(1228,14): error C2079: “g_encryptedUrls”使用未定义的 struct“EncryptedURL” 1>DLL代码执行.cpp(1228,14): error C2371: “g_encryptedUrls”: 重定义不同类型 1>DLL代码执行.cpp(1194): message : 参见“g_encryptedUrls”的声明 1>DLL代码执行.cpp(1306,57): error C2027: 使用了未定义类型“EncryptedURL” 1>DLL代码执行.cpp(1191): message : 参见“EncryptedURL”的声明 1>DLL代码执行.cpp(1306,88): error C2027: 使用了未定义类型“EncryptedURL” 1>DLL代码执行.cpp(1191): message : 参见“EncryptedURL”的声明 1>DLL代码执行.cpp(1306,113): error C2660: “AESDecrypt”: 函数不接受 3 个参数 1>DLL代码执行.cpp(1237,14): message : 参见“AESDecrypt”的声明 1>DLL代码执行.cpp(1307,55): error C2027: 使用了未定义类型“EncryptedURL” 1>DLL代码执行.cpp(1191): message : 参见“EncryptedURL”的声明 1>DLL代码执行.cpp(1307,84): error C2027: 使用了未定义类型“EncryptedURL” 1>DLL代码执行.cpp(1191): message : 参见“EncryptedURL”的声明 1>DLL代码执行.cpp(1307,107): error C2660: “AESDecrypt”: 函数不接受 3 个参数 1>DLL代码执行.cpp(1237,14): message : 参见“AESDecrypt”的声明 1>已完成生成项目“DLL代码执行.vcxproj”的操作 - 失败。 ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
最新发布
07-18
#define _NO_CRT_STDIO_INLINE #define _IMAGEHLP_SOURCE_ #define _IMAGEHLP64 #include <DbgHelp.h> #pragma comment(lib, "Dbghelp.lib") #include <imagehlp.h> #pragma comment(lib, "imagehlp.lib") // 生成 DMP 文件的函数 void GenerateCrashDump(PEXCEPTION_POINTERS pExceptionInfo) { // 获取桌面路径作为保存位置 wchar_t desktopPath[MAX_PATH]; SHGetFolderPathW(NULL, CSIDL_DESKTOP, NULL, 0, desktopPath); // 构造文件名 (带时间戳) wchar_t dumpPath[MAX_PATH]; SYSTEMTIME st; GetLocalTime(&st); swprintf_s(dumpPath, L"%s\\Crash_%04d%02d%02d_%02d%02d%02d.dmp", desktopPath, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); // 创建文件 HANDLE hFile = CreateFileW( dumpPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ExceptionPointers = pExceptionInfo; dumpInfo.ClientPointers = TRUE; // 写入 DMP 文件 (包含模块和线程信息) MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hFile, static_cast<MINIDUMP_TYPE>( MiniDumpWithDataSegs | MiniDumpWithHandleData | MiniDumpWithUnloadedModules), &dumpInfo, NULL, NULL); CloseHandle(hFile); } } // 顶级异常处理器 LONG WINAPI TopLevelExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) { GenerateCrashDump(pExceptionInfo); return EXCEPTION_EXECUTE_HANDLER; // 结束程序 } // 初始化崩溃处理器 void InitCrashReporting() { SetUnhandledExceptionFilter(TopLevelExceptionHandler); } 生成开始于 16:59... 1>------ 已启动生成: 项目: pdf2word, 配置: Debug Win32 ------ 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(392,5): warning MSB8028: The intermediate directory (C:\Users\admin\Desktop\wzl\project\FyPDFConverter\Temp\Debug\) contains files shared from another project (base.vcxproj, DuiLib.vcxproj, FFileTool.vcxproj). This can lead to incorrect clean and rebuild behavior. 1>stdafx.cpp 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(1540): warning C4091: “typedef ”: 没有声明变量时忽略“”的左侧 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(3056): warning C4091: “typedef ”: 没有声明变量时忽略“”的左侧 1>c:\users\admin\desktop\wzl\project\fypdfconverter\pdf2word\format.h(45): warning C4018: “>=”: 有符号/无符号不匹配 1>c:\users\admin\desktop\wzl\project\fypdfconverter\pdf2word\format.h(66): warning C4018: “>=”: 有符号/无符号不匹配 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\shlobj.h(1151): warning C4091: “typedef ”: 没有声明变量时忽略“tagGPFIDL_FLAGS”的左侧 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(136): error C2011: “_LOADED_IMAGE”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(133): note: 参见“_LOADED_IMAGE”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(705): error C2011: “_IMAGE_DEBUG_INFORMATION”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(376): note: 参见“_IMAGE_DEBUG_INFORMATION”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(877): error C2011: “_MODLOAD_DATA”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(548): note: 参见“_MODLOAD_DATA”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(885): error C2011: “_MODLOAD_CVMISC”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(556): note: 参见“_MODLOAD_CVMISC”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(894): error C2011: “_MODLOAD_PDBGUID_PDBAGE”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(565): note: 参见“_MODLOAD_PDBGUID_PDBAGE”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(904): error C2365: “AddrMode1616”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(575): note: 参见“AddrMode1616”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(905): error C2365: “AddrMode1632”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(576): note: 参见“AddrMode1632”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(906): error C2365: “AddrModeReal”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(577): note: 参见“AddrModeReal”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(908): error C2365: “AddrModeFlat”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(579): note: 参见“AddrModeFlat”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(908): error C2371: “ADDRESS_MODE”: 重定义不同类型 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(579): note: 参见“ADDRESS_MODE”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(910): error C2011: “_tagADDRESS64”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(581): note: 参见“_tagADDRESS64”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(920): error C2011: “_tagADDRESS”:“struct”类型重定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(591): note: 参见“_tagADDRESS”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(932): error C2084: 函数“void Address32To64(LPADDRESS,LPADDRESS64)”已有主体 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(599): note: 参见“Address32To64”的前一个定义 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(933): error C2027: 使用了未定义类型“_tagADDRESS64” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(581): note: 参见“_tagADDRESS64”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(933): error C2227: “->Offset”的左边必须指向类/结构/联合/泛型类型 ..... 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(1405): note: 参见“_IMAGEHLP_CBA_READ_MEMORY”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(1742): error C2365: “sevInfo”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(1413): note: 参见“sevInfo”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(1743): error C2365: “sevProblem”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(1414): note: 参见“sevProblem”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(1744): error C2365: “sevAttn”: 重定义;以前的定义是“枚举数” 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\dbghelp.h(1415): note: 参见“sevAttn”的声明 1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\imagehlp.h(1744): fatal error C1003: 错误计数超过 100;正在停止编译 1>已完成生成项目“pdf2word.vcxproj”的操作 - 失败。 ========== 生成: 0 成功,1 失败,0 最新,0 已跳过 ========== ========== 生成 于 16:59 完成,耗时 02.337 秒 ==========
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值