Qt 5构建错误:测试表达式后的额外字符

Qt 5 build error: extra characters after test expression

本文关键字:字符 表达式 测试 构建 错误 Qt      更新时间:2023-10-16

我正在尝试学习Qt 5.3,这是我的第一个程序(hello world)。当我尝试构建时,它显示以下错误:

测试表达式后的额外字符。

我完全不明白为什么会出现这个错误。我只是从互联网上拿了一些简单的代码来检查我是否正确安装了Qt。下面是代码:

#include <QApplication>
#include <QPushButton>
int main(int argc, char **argv)
{
    QApplication app (argc, argv);
    QPushButton button ("Hello world !");
    button.show();
    return app.exec();
}

错误显示在第3、5、6、8行。我是一个全新的Qt,所以请给一个简单的解释。

检查.pro文件。有时是因为你在非最后一行的末尾没有一个黑斜杠:

HEADERS += Qt/mainwindow.h 
    Qt/MPrintableWidget.h 
    Qt/MPrintableWidgetGroup.h    # Oooops forgot the  here
    Qt/MFixedSizeDialog.h 
    Qt/MScreenPage.h

这里的每一行都需要以反斜杠结束

这段代码在这里编译、链接和运行得很好,所以我唯一能想到的是你机器上的包含文件有问题。

首先,确保您正在使用Qt5,并且您已经有了Qt5包含文件。

第二,可以尝试从命令行编译它。下面是我在Linux机器上使用的Qt5和g++:

g++ -fPIC -I /usr/include/qt5/QtWidgets -I /usr/include/qt5 qttest.cpp -o qttest -lQt5Core -lQt5Widgets

你没有说你使用的是哪个操作系统,或者你是如何构建的。无论您使用的是什么,您都需要验证它实际上使用的是正确的文件。

我在Windows上遇到这个错误消息。Qt Creator创建的全新项目无法解析.pro或构建。核心问题是我添加了一个注册表项来更改所有cmd.exe实例的代码页,以便它能更好地支持Unicode输出。

注册表项命名为Autorun,字符串值为chcp 65001。(在注册表中有很多地方可以存放这个键;使用Regedit的搜索功能来查看是否有这样一个键。我的碰巧隐藏在一个路径中,其中包含我的特定用户的GUID。)我的症状是在全新的项目上出现这样的错误消息:

C:/Qt/5.11/msvc2017_64/mkspecs/features/toolchain.prf(208): Extra characters after test expression.
Project ERROR: Compiler produced empty value for Active.
C:/Qt/5.11/msvc2017_64/mkspecs/features/toolchain.prf(208): Extra characters after test expression.
Error while parsing file C:UsersphrogzDocumentsFooBarFooBar.pro. Giving up.

问题,我猜测,是Qt Creator使用cmd.exe在Windows上运行代码,并解析由此产生的文本输出。Qt Creator必须有一个脆弱的输出文本解析器,当Autorun在启动时将额外的输出放在命令处理器中时,该解析器会失败。(也许它是从一个特定的行号开始,跳过cmd.exe启动垃圾信息?)

解决方案对我来说是将Autorun命令从chcp 65001更改为@chcp 65001>nul,这可以防止它将Active code page: 65001发送到输出中。

我发现这个问题被发现并在这个Qt论坛线程中讨论。

我刚刚遇到了同样的错误。它在。pro文件中。你可以打开仔细检查。-你忘了在一行的末尾加上黑斜杠。-在黑斜杠后再加一个字符(在同一行)