Intel DPC++2024编译GDI+库报'EmfPlusRecordType'不完整类型错误
解决Intel DPC++ 2024编译GDI+时
EmfPlusRecordType不完整类型的错误 问题描述
引入标准GDI+头文件#include <gdiplus.h>后,使用MSVC编译器可正常编译,但切换至Intel DPC++ 2024编译器时,会在gdiplusenums.h头文件中触发编译错误:'EmfPlusRecordType' is an incomplete type,代码本身无逻辑问题,需无需修改标准头文件的解决办法。
解决办法
在包含gdiplus.h之前,显式定义GDIPVER宏指定GDI+版本(建议设为0x0110或更高),强制编译器触发EmfPlusRecordType枚举的完整定义:
#define GDIPVER 0x0110 #include <gdiplus.h>
原理:EmfPlusRecordType枚举仅在GDIPVER >= 0x0101时才会在gdiplusenums.h中完整定义,Intel DPC++默认的宏设置可能未满足该条件,导致枚举类型不完整。显式定义GDIPVER可确保相关条件编译块被正确执行。
完整错误输出
error: 'EmfPlusRecordType' is an incomplete type #include <gdiplus.h> ^ In file included from test.cpp:1: In file included from C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\gdiplus.h:26: C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\gdiplusenums.h:12345: error: forward declaration of 'enum Gdiplus::EmfPlusRecordType' does not complete the type EmfPlusRecordType recordType; ^
可复现代码
#include <gdiplus.h> int main() { Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr); Gdiplus::Bitmap bitmap(100, 100); Gdiplus::GdiplusShutdown(gdiplusToken); return 0; }
内容的提问来源于stack exchange,提问作者BullyWiiPlaza
相关产品推荐
相关产品推荐

