qt中出现error: C2059: 语法错误:“namespace”未定义等大量错误的问题
昨天下载了一个github上的qt工程,拿回来一编译出现了N多错误,但是工程明明是正确的,没有什么特殊的配置设置,
但是就是几乎所有的代码都在报错。
可以看到关于类的操作都有问题
..\qtprocess\mainwindow.cpp: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 ..\qtprocess\mainwindow.cpp(11): error C2447: “{”: 缺少函数标题(是否是老式的形式表?) ringsprogressbar.cpp c:\users\administrator\documents\qtprocess\ringsprogressbar.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(149): error C2804: 二进制“operator |”的参数太多 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(149): error C2333: “RingsProgressbar::operator |”: 函数声明中有错误;跳过函数体 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(152): error C3254: “RingsProgressbar”: 类包含显式重写“setAlignment”,但并不从包含函数声明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(152): error C2838: “setAlignment”: 成员声明中的限定名称非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(155): error C3254: “RingsProgressbar”: 类包含显式重写“setFlags”,但并不从包含函数声明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(155): error C2838: “setFlags”: 成员声明中的限定名称非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(159): error C3254: “RingsProgressbar”: 类包含显式重写“setTabStop”,但并不从包含函数声明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(159): error C2838: “setTabStop”: 成员声明中的限定名称非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(163): error C3254: “RingsProgressbar”: 类包含显式重写“setTabStopDistance”,但并不从包含函数声明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(163): error C2838: “setTabStopDistance”: 成员声明中的限定名称非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(167): error C3412: “QMetaTypeId<RingsProgressbar::QTextOption::Tab>”: 不能在当前范围内专用化模板 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(56): error C2804: 二进制“operator <<”的参数太多 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(57): error C2804: 二进制“operator >>”的参数太多 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(133): error C3412: “QTypeInfo<RingsProgressbar::QPen>”: 不能在当前范围内专用化模板 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(136): error C2804: 二进制“operator <<”的参数太多 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(495): error C3412: “QTypeInfo<RingsProgressbar::QPainter::PixmapFragment>”: 不能在当前范围内专用化模板 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(497): error C2804: 二进制“operator |”的参数太多 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(497): error C2333: “RingsProgressbar::operator |”: 函数声明中有错误;跳过函数体 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(503): error C3254: “RingsProgressbar”: 类包含显式重写“drawLine”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(503): error C2838: “drawLine”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(508): error C3254: “RingsProgressbar”: 类包含显式重写“drawLine”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(508): error C2838: “drawLine”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(513): error C3254: “RingsProgressbar”: 类包含显式重写“drawLine”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(513): error C2838: “drawLine”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(519): error C3254: “RingsProgressbar”: 类包含显式重写“drawLine”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(519): error C2838: “drawLine”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(525): error C3254: “RingsProgressbar”: 类包含显式重写“drawLine”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(525): error C2838: “drawLine”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(530): error C3254: “RingsProgressbar”: 类包含显式重写“drawLines”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(530): error C2838: “drawLines”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(535): error C3254: “RingsProgressbar”: 类包含显式重写“drawLines”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(535): error C2838: “drawLines”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(540): error C3254: “RingsProgressbar”: 类包含显式重写“drawLines”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(540): error C2838: “drawLines”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(545): error C3254: “RingsProgressbar”: 类包含显式重写“drawLines”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(545): error C2838: “drawLines”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(550): error C3254: “RingsProgressbar”: 类包含显式重写“drawPolyline”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(550): error C2838: “drawPolyline”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(555): error C3254: “RingsProgressbar”: 类包含显式重写“drawPolyline”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(555): error C2838: “drawPolyline”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(560): error C3254: “RingsProgressbar”: 类包含显式重写“drawPolygon”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(560): error C2838: “drawPolygon”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(565): error C3254: “RingsProgressbar”: 类包含显式重写“drawPolygon”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(565): error C2838: “drawPolygon”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(570): error C3254: “RingsProgressbar”: 类包含显式重写“drawConvexPolygon”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(570): error C2838: “drawConvexPolygon”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(575): error C3254: “RingsProgressbar”: 类包含显式重写“drawConvexPolygon”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(575): error C2838: “drawConvexPolygon”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(580): error C3254: “RingsProgressbar”: 类包含显式重写“drawRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(580): error C2838: “drawRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(585): error C3254: “RingsProgressbar”: 类包含显式重写“drawRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(585): error C2838: “drawRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(591): error C3254: “RingsProgressbar”: 类包含显式重写“drawRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(591): error C2838: “drawRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(596): error C3254: “RingsProgressbar”: 类包含显式重写“drawRects”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(596): error C2838: “drawRects”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(601): error C3254: “RingsProgressbar”: 类包含显式重写“drawRects”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(601): error C2838: “drawRects”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(606): error C3254: “RingsProgressbar”: 类包含显式重写“drawPoint”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(606): error C2838: “drawPoint”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(611): error C3254: “RingsProgressbar”: 类包含显式重写“drawPoint”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(611): error C2838: “drawPoint”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(617): error C3254: “RingsProgressbar”: 类包含显式重写“drawPoint”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(617): error C2838: “drawPoint”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(622): error C3254: “RingsProgressbar”: 类包含显式重写“drawPoints”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(622): error C2838: “drawPoints”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(627): error C3254: “RingsProgressbar”: 类包含显式重写“drawPoints”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(627): error C2838: “drawPoints”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(632): error C3254: “RingsProgressbar”: 类包含显式重写“drawRoundRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(632): error C2838: “drawRoundRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(637): error C3254: “RingsProgressbar”: 类包含显式重写“drawRoundRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(637): error C2838: “drawRoundRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(643): error C3254: “RingsProgressbar”: 类包含显式重写“drawRoundedRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(643): error C2838: “drawRoundedRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(649): error C3254: “RingsProgressbar”: 类包含显式重写“drawRoundedRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(649): error C2838: “drawRoundedRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(654): error C3254: “RingsProgressbar”: 类包含显式重写“drawEllipse”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(654): error C2838: “drawEllipse”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(659): error C3254: “RingsProgressbar”: 类包含显式重写“drawEllipse”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(659): error C2838: “drawEllipse”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(664): error C3254: “RingsProgressbar”: 类包含显式重写“drawEllipse”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(664): error C2838: “drawEllipse”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(669): error C3254: “RingsProgressbar”: 类包含显式重写“drawArc”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(669): error C2838: “drawArc”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(674): error C3254: “RingsProgressbar”: 类包含显式重写“drawArc”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(674): error C2838: “drawArc”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(679): error C3254: “RingsProgressbar”: 类包含显式重写“drawPie”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(679): error C2838: “drawPie”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(684): error C3254: “RingsProgressbar”: 类包含显式重写“drawPie”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(684): error C2838: “drawPie”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(689): error C3254: “RingsProgressbar”: 类包含显式重写“drawChord”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(689): error C2838: “drawChord”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(694): error C3254: “RingsProgressbar”: 类包含显式重写“drawChord”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(694): error C2838: “drawChord”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(699): error C3254: “RingsProgressbar”: 类包含显式重写“setClipRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(699): error C2838: “setClipRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(704): error C3254: “RingsProgressbar”: 类包含显式重写“eraseRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(704): error C2838: “eraseRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(709): error C3254: “RingsProgressbar”: 类包含显式重写“eraseRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(709): error C2838: “eraseRect”: 成员声明中的限定名称非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(714): error C3254: “RingsProgressbar”: 类包含显式重写“fillRect”,但并不从包含函数声明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(714): fatal error C1003: 错误计数超过 100;正在停止编译
想了一下,应该不是代码内容的问题,那就只能出在格式上,首先查看代码的编码格式,是UTF-8没错,不是编码问题。这就奇怪了,查看系统设置里面,发现除了编码格式,还有换行符的设置。
查看了一下,果然下载的内容默认设置的是UNIX的LF格式,全部改成CRLF后,编译正常。
总结一下网上说的该类问题的原因主要分为三种:
- 文件编码格式,要于qt中设置一致;
- 换行符格式,要于qt中设置一致;
- 文件循环引用的问题,记得要设置宏