QtCreator报大量未知标识符错误的解决方法

目录

      • 前言
      • 背景介绍
      • 问题1
      • 问题1解决方法
      • 问题2
      • 问题2 解决方法
      • 总结

前言

本文记录了在使用QtCreator开发时遇到的一个错误,导致编译时出现大量的“未知标识符”,经过一番努力最终解决了这个问题,特在此记录。

背景介绍

Qt项目在麒麟V10 系统下运行正常,现需要在一台新的Wibdows系统PC机上安装开发环境,在装完Qt开发环境后,测试一切正常,准备同步项目源代码。源码在自己搭建的GitLab服务器上,所以我又安装了git最新的客户端(https://git-scm.com/download/win)和小乌龟git管理工具(https://tortoisegit.org/download/)。配置好git的账号信息后,把代码clone到本地准备编译。

问题1

用QtCreator打开项目进行编译,此时在问题对话框中出现大量的未知标识符错误。通过与其他windows系统下的项目文件比较发现是行尾不同,报错的PC上代码文件的行尾是LF,而其他正常的则是CRLF。

问题1解决方法

在这里插入图片描述
通过对比发现是win系统下的文件行尾有问题,这让我想起了在安装git时的一个配置项的选择,就是上图所示的行尾配置引导页,我选的是第三个 “Checkout as-is,commit as-is”。项目在麒麟V10系统下正常编译运行,其文件行尾是LF,该行尾在Windows下无法识别,导致编译报错。于是果断卸载git并重新安装,选择上图中第一个选项作为行尾配置。 把之前clone的代码删除后重新clone 后再次编译,不再有大量未知标识符的报错。

问题2

虽然没有了大量未知标识符的错误,但是还有几个错误提示是class 定义有问题,多一个括号或少一个括号之类的问题,经过对比发现是文件编码格式问题,报错的文件编码为UTF-8 而正常的文件格式是UTF-8 BOM。

问题2 解决方法

首先了解下UTF-8与UTF-8 BOM的区别:

UTF-8是一种通用的Unicode字符编码方式,使用可变长度的编码来表示Unicode字符。它可以表示几乎所有的Unicode字符,包括ASCII字符和非ASCII字符。UTF-8编码中的每个字符使用1到4个字节表示,具体字节长度取决于字符的Unicode码位。

UTF-8 BOM是一个特殊的字节序列,即字节顺序标记(Byte Order Mark),用于标识文本文件的字节顺序。它是由3个字节构成的特殊字符序列(0xEF, 0xBB, 0xBF),在文件开头作为文件头部的标记。BOM最初设计用于解决字节顺序的问题,主要在一些特定的编码方案中使用,如UTF-16和UTF-32。然而,在UTF-8中,BOM不是必需的,也不推荐使用。

UTF-8编码的文件通常不包含BOM。没有BOM的UTF-8文件被视为以UTF-8编码存储的纯文本文件。当打开这样的文件时,应用程序会默认使用UTF-8编码来解释其内容。

相比之下,带有BOM的UTF-8文件在文件开头包含BOM标记。当处理这样的文件时,应用程序可以通过检查BOM来确定文件的编码方式。BOM的存在可以帮助应用程序自动识别文件的编码。但是,某些应用程序可能对BOM敏感,可能会解释BOM字符本身,导致显示问题。

知道了UTF-8与UTF-8 BOM的区别,才明白是代码中含有中文字符导致编译失败的,解决这个问题只能是将代码中含有中文字符的文件格式转为UTF-8 BOM 。这一点可以通过修改QtCreator的配置实现,如下图所示。按下图配置后,在源码中随便敲几个空格然后保存,文件格式就变为UTF-8 BOM了。
在这里插入图片描述

重新加载文件后,再次编译就一切正常了。下图是保存文件后按照新编码格式加载文件的示例:
在这里插入图片描述

总结

以上就是本文的所有内容了,如有疑问欢迎留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DTEmpower案例操作教程】向导式建模

DTEmpower是由天洑软件自主研发的一款通用的智能数据建模软件,致力于帮助工程师及工科专业学生,利用工业领域中的仿真、试验、测量等各类数据进行挖掘分析,建立高质量的数据模型,实现快速设计评估、实时仿真预测、系统参数预警、设…

X509证书结构

使用ASN.1语言描述,我们可以将X509Certificate抽象为以下结构: Certificate :: SEQUENCE {tbsCertificate TBSCertificate,signatureAlgorithm AlgorithmIdentifier,signature BIT STRING }即基本证书域、签名算法、签名值。 其…

手机上记录的备忘录内容怎么分享到电脑上查看?

手机已经成为了我们生活中不可或缺的一部分,我们用它来处理琐碎事务,记录生活点滴,手机备忘录就是我们常用的工具之一。但随着工作的需要,我们往往会遇到一个问题:手机上记录的备忘录内容,如何方便地分享到…

设计模式——3. 抽象工厂模式

1. 说明 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一组相关或依赖对象的方式,而无需指定它们的具体类。抽象工厂模式是工厂模式的扩展,它关注于创建一组相关的对象家族,而不仅仅是一个单一的对象。 抽象工厂模式通常涉及以下几个角…

微信小游戏从零到上线系列文章整理,建议收藏

引言 本系列是《从零开始开发贪吃蛇小游戏到上线系列》,欢迎大家关注分享收藏订阅。 大家中秋快乐,我是亿元程序员,一位有着8年游戏行业经验的主程。前面笔者给大家讲解了微信小游戏如何从零到上线的流程。可能很多小伙伴都还没有看到。 本…

【Oracle】Oracle系列之十一--PL/SQL

文章目录 往期回顾前言1. PL/SQL语句块组成2. 变量的声明与使用(1)变量声明(2)变量赋值 3. 控制语句(1)分支语句(2)循环语句 4. 异常处理(1)系统异常&#xf…

某高校的毕设

最近通过某个平台接的单子,最后Kali做的测试没有公开可以私聊给教程。 下面是规划与配置 1.vlan方面:推荐一个vlan下的所有主机为一个子网网段 连接电脑和http客户端的接口配置为access接口 交换机与交换机或路由器连接的接口配置为trunk接口---也可以…

Golang中的类型转换介绍

Golang中存在4种类型转换,分别是:断言、显式、隐式、强制。下面我将一一介绍每种转换使用场景和方法 一、断言类型转换 主要是判断变量是否可以转换成某一类型。断言主要用于变量是interface{}类型(接口类型)的情况,…

Python-表白小程序练习

测试代码 在结果导向的今天,切勿眼高于顶,不论用任何方法能转换、拿出实际成果东西才是关键,即使一个制作很简易的程序,你想将其最终生成可运行的版本也是需要下一番功夫的。不要努力成为一个嘴炮成功者,要努力成为一个有价值的人…

阿里云网络、数据中心和服务器技术创新优势说明

阿里云服务器技术创新、网络技术创新、数据中心技术创新和智能运维:云服务器方升架构、自研硬件、自研存储硬件AliFlash和异构计算加速平台,以及全自研网络系统技术创新和数据中心巴拿马电源、液冷技术等技术创新说明,阿里云百科aliyunbaike.…

conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题

上一篇博客《conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败》解决了conan 1.60.0交叉编译boost/1.80.1的问题后,我继续交叉编译openssl/3.1.2时又报错了 conan install openssl/3.1.2 -pr:h aarch64-linux-gnu.…

Linux--进程间通信之命名管道

目录 前言概念命名管道的创建命名管道特性 命名管道通信建立连接资源处理 Client && Server通信总结 前言 上一篇文章介绍匿名管道的进程间通信只适合在具有血缘关系的进程间进行通信,但是如果我们想让两个不相关的进程实现通信,使用匿名管道显…

某企查ymg_ssr列表详情

js篇— 今天来看下某企查的列表详情–侵删 header发现这个参数 先断点一下 然后上一步 就到了这个地方 就开始扣一下这个js 三大段,先不解混淆了, 给a粘贴出来 ,去掉自执行 给结果稍微改一下 缺windows,开始补环境 直接上…

Linux常见指令(1)

Linux常见指令[1] 一.前言1.操作系统简述 二.Linux常见指令1.登录Xshell2.Linux下的常见命令1.pwd2.ls1.ls -a2.ls -d3.ls -l 3.cd Linux中的文件系统1.文件的相关知识2.Linux下目录结构的认识1.什么叫做路径?2.Linux的整体目录结构3.为什么要有路径呢?4.绝对路径与相对路径 …

常识判断 --- 科技常识

目录 力与热 光和声 航空成就 垃圾分类 百科知识 血型 二十四节气歌 春雨惊春清谷天 夏满忙夏暑相连 秋处露秋寒霜降 冬雪雪冬小大寒 力与热 光和声 航空成就 垃圾分类 百科知识 血型

ThemeForest – Canvas 7.2.0 – 多用途 HTML5 模板

ThemeForest 上的 HTML 网站模板受到全球数百万客户的喜爱。与包含网站所有页面并允许您在 WP 仪表板中自定义字体和样式的 WordPress 主题不同,这些设计模板是用 HTML 构建的。您可以在 HTML 编辑器中编辑模板,但不能在 WordPress 上编辑模板&#xff0…

35 LRU缓存

LRU缓存 题解1 双map(差2个testcases)题解2 哈希表双向链表(参考)题解3 STL:listunordered_map 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正…

SpringMVC+统一表现层返回值+异常处理器

一、统一表现层返回值 根据我们不同的处理方法,返回的数据格式都会不同,例如添加只返回true|false,删除同理,而查询却返回数据。 Result类 为此我们封装一个result类来用于表现层的返回。 public class Result {//描述统一格式…

国庆中秋喜相逢

鲁迅先生曾经说过,“一个国家的文学,就是那个民族心灵的缩影。”在这个充满着诗与远方的中秋佳节,我们迎来了又一个国庆节,不由自主地感慨起这个祖国的壮美与辉煌。 中秋节,是中华民族传统的佳节之一,也是…

关于:Java8新特性函数式编程 - Lambda、Stream流、Optional

函数式编程 stream流 1.常用方法 1.1中间操作 filter ​ 可以对流中的元素进行条件过滤&#xff0c;符合过滤条件的才能继续留在流中 例如&#xff0c;打印所有姓名长度大于1的作家的姓名 List<Author> authors getAuthors(); authors.stream().filter(author -&g…