Qt 5构建错误:测试表达式后的额外字符
Qt 5 build error: extra characters after test expression
我正在尝试学习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文件中。你可以打开仔细检查。-你忘了在一行的末尾加上黑斜杠。-在黑斜杠后再加一个字符(在同一行)
- 带有多个字符分隔符的正则表达式
- 为什么一个表达式中的 std::string 连接给出的结果与逐个字符不同的结果?
- 如何称呼表达式"T (&some(...))[2]' 其中 T=字符
- C++ [正则表达式] 如何提取给定的字符值
- C++正则表达式字符类不匹配
- 通过正则表达式拆分字符串会切断结果的第一个字母
- 正则表达式 - 匹配不遵循特定模式的字符
- 如何使用 ASCII 转换使用字符堆栈计算后缀表达式
- 二进制表达式的操作数无效("常量字符*"和"常量字符*")
- 使用具有特殊字符的正则表达式标记 C++ 字符串
- 恒定字符阵列的获取字符串长度函数(strlen)不是恒定表达式
- 正则表达式:从模式字符串 1.string2'string3 中提取字符串,其中字符串 1 可以包含 '." 字符
- 提升正则表达式 cpp 用于查找 %% 之间的字符串,输出不包括 % 字符本身
- 如何使用正则表达式匹配不包含特殊字符(&、\、<、>、|、)的字符串,除非它们以反斜杠开头
- 将一个特定字符替换为正则表达式匹配中的另一个字符
- 修改正则表达式以包含反斜杠和单引号(以便反斜杠表现为转义字符)
- C++正则表达式中的特殊字符
- 使用正则表达式为每个连续的大写字符附加'.'
- C++正则表达式转义标点字符,如"."
- arm-none-eabi-g++ 忽略表达式 stm32f4 中的无效字符"#"