E:\app\QT\Tools\mingw810_64\x86_64-w64-mingw32\include\oaidl.h:465: error: reference to 'byte' is ambiguous
In file included from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/msxml.h:24,
from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/urlmon.h:290,
from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/objbase.h:163,
from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/ole2.h:17,
from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/wtypes.h:12,
from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/winscard.h:10,
from E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/windows.h:97,
from E:/app/QT/5.15.2/mingw81_64/include/QtCore/qt_windows.h:64,
from E:/app/QT/5.15.2/mingw81_64/include/QtGui/qopengl.h:49,
from E:/app/QT/5.15.2/mingw81_64/include/QtGui/QtGui:47,
from E:/app/QT/5.15.2/mingw81_64/include/QtCharts/QtChartsDepends:4,
from E:/app/QT/5.15.2/mingw81_64/include/QtCharts/QtCharts:3,
from ..\shiyouT\src/testExample/testQChart.h:4,
from ..\shiyouT\mainwindow.cpp:5:
E:/app/QT/Tools/mingw810_64/x86_64-w64-mingw32/include/oaidl.h:465:5: error: reference to 'byte' is ambiguous
byte *pRecord;
^~~~
问题在于 #include
chat分析:
是的,由于Qt和Windows头文件中都定义了字节类型别名byte,当同时包含这两个头文件时就会产生冲突和歧义错误。
既然只包含QtCharts头文件就报错了,说明这里QtCharts内部也使用到了Windows头文件。
一些解决方法:
尝试不使用QtCharts中的字节类型,使用更具体的类型如unsigned char等。
查看QtCharts源代码,是否可以修改内部使用Windows头文件,换成Qt自带类型。
在包含QtCharts前使用命名空间限定如::byte来区分。
最后不得已可以定义QtCharts自己的字节类型别名,避免与Windows冲突。
试试更高版本的Qt,是否这个问题已经被修复。
联系Qt开发者查询这个问题,看是否有现成解决方案。
最后不行就只能避免使用QtCharts了。
总之,问题的根本原因是QtCharts内部使用Windows头文件定义的字节类型,产生与Windows自身定义的冲突。需要从源头修改或规避这个定义来解决。