Qt(MSVC)下报“语法错误缺少“}““语法错误缺少“常数“ 的解决办法

news2025/2/22 14:28:58

1.现象

目前我在工程中试图使用QHttpServer时,一编译,就报了一堆奇奇怪怪的错误:

D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:75: error: C2143: 语法错误: 缺少“}(在“(”的前面)
D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:75: error: C2059: 语法错误:“常数”
D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:81: error: C2143: 语法错误: 缺少“;(在“}”的前面)
D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:81: error: C2238: 意外的标记位于“;”之前
D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:82: error: C2255: “friend”: 不允许位于类定义之外
D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:82: error: C2065: “Method”: 未声明的标识符
D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:82: error: C2365: “qt_getEnumMetaObject”: 重定义;以前的定义是“函数”
......

在这里插入图片描述怎么会这样?我记得之前我用得好好的啊。
经过一番排查,发现了问题。是open62541.h的问题。
只要把这个头文件放在QtHttpServer的后面就可以了。
在这里插入图片描述

2.具体原因分析

2.1.解决办法

原因是DELETE这个名称被宏定义了,然后QHttpServerRequest中又使用到它,然后在展开宏预处理时就被替换了(详情请看2.2)。
解决办法:

#include "open62541.h"
#undef DELETE // 加这个就行

#include "QtHttpServer/qhttpserverrequest.h"
#include "QtHttpServer/qhttpserver.h"

2.2.分析,debug的过程

首先,我们先按照会触发编译错误的方式写:
在这里插入图片描述然后双击下面的第一条报错,跳到出错的位置
在这里插入图片描述在这里直接看,其实看不出哪里错误的。但是,在出错的这一行,按着ctrl键,然后用鼠标点击那个DELETE。
在这里插入图片描述立马跳转到winnt.h这里了:
在这里插入图片描述一看,好家伙,原来这个DELETE是在这里被宏定义了。不难猜到,这个winnt.h肯定是open62541.h带进来的。
那就好办了。
在include头文件时,先#include “open62541.h”,然后再将这个DELETE取消宏定义。也就是前面说的

#include "open62541.h"
#undef DELETE // 加这个就行

#include "QtHttpServer/qhttpserverrequest.h"
#include "QtHttpServer/qhttpserver.h"

看到这个导致错误的原因,不禁让人想起那个经典笑话:

#define true false
#define false true

3.总结

啊,真是一场酣畅淋漓的debug。
总之见到这种明显不是语法错误,但是在编译时报语法错误的问题,都可以考虑是不是宏定义的问题(也有可能是中文+编码的问题)。

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

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

相关文章

最新扣子(Coze)实战案例:使用图像流做超分,模糊图片秒变清晰,完全免费教程

🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》,完全免费学习。 👀 关注斜杠君,可获取完整版教程。👍&#x1f3f…

Mysql中间件和高可用

文章目录 一、MySQL中间件代理服务器MycatMycat应用场景Mycat部署 实现读写分离 二、MySQL高可用高可用解决方案MHA高可用实现MHA 一、MySQL中间件代理服务器 数据库主要分为两大类:关系型数据库与 NoSQL 数据库(非关系型数据库)。 数据库主…

软考中级数据库系统工程师备考经验分享

前几天软考成绩出了,赶紧查询了一下发现自己顺利通过啦(上午63,下午67,开心),因此本文记录一下我的备考经验分享给大家。因为工作中项目管理类的知识没有系统学习过,本来想直接报名软考高级证书…

7.6第三天作业

一、在数据库中创建一个表student,用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); (1.)先创建一个数据库 (2.)创建student表 查看是否创建成功 1、向studen…

2024年软件测试八股文(含答案)

Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自…

基于SpringBoot+Vue的招生管理系统(带1w+文档)

基于SpringBootVue的招生管理系统(带1w文档) 通过招生管理系统的研究可以更好地理解系统开发的意义,而且也有利于发展更多的智能系统,解决了人才的供给和需求的平衡问题,招生管理系统的开发建设,由于其开发周期短&…

NLP简介

自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自…

2.pwn的linux基础(计算机内部数据结构存储形式)

linux基础 保护层级: 分为四个ring0-ring3 一般来说就两个,0和3 0为内核 3为用户 权限: 用户分为多个组 文件和目录等等的权限一般都是三个,即可读可写可执行。 读:R,写:W,执行:X 赋予一个可执行文件执行权限就是chmod x file…

快手大模型首次集体亮相,用AI重塑内容与商业生态

7月6日,在2024世界人工智能大会期间,快手举办了以“新AI新应用新生态”为主题的大模型论坛,会上,快手大模型首次集体亮相,视频生成大模型可灵、图像生成大模型可图等产品的多项新功能正式发布。 继图生视频、视频续写…

python-开关灯(赛氪OJ)

[题目描述] 假设有 N 盏灯(N 为不大于 5000 的正整数),从 1 到到 N 按顺序依次编号,初始时全部处于开启状态;第一个人( 1 号)将灯全部关闭,第二个人( 2 号)将…

有趣的算法

目录: 1、百钱买百鸡 2、韩信点兵 1)概述 2)正常取余算法 3)循环算法 1、百钱买百鸡 我国古代《算经》中的“百钱买百鸡”问题: 鸡翁一,值钱五;鸡母一,值钱三;鸡…

【第21章】MyBatis-Plus多数据源支持

文章目录 前言一、dynamic-datasource1. 特性2. 约定3. 使用方法3.1 引入依赖3.2 配置数据源3.3 使用 DS 切换数据源 二、mybatis-mate1.特性2.使用方法2.1 配置数据源2.2 使用 Sharding 切换数据源2.3 切换指定数据库节点 三、实战1. 引入库2. 配置3. 使用 DS 切换数据源4. 测…

vulhub-activemq(CVE-2015-5254)

Apache ActiveMQ 5.13.0版本之前到5.x版本的安全漏洞,该程序引起的漏洞不限制代理中可以序列化的类。远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。 Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.1…

Faster-RCNN·代码解读系列01:Selective Search 和 R-CNN、Fast-CNN 简介

Selective Search 和 R-CNN、Fast-CNN 简介 1 目标检测算法简介1.0滑窗法的思路1.1 Selective Search 和 R-CNN 简介1.2.1 Selective Search简介1.1.1 Selective Search的思路1.1.2 Selective Search图解 1.2 Selective Search 和 Fast-CNN简介1.2.1 SPP和ROI Pooling简介1.2.2…

MySQL/SqlServer 跨服务器 增删改查(CRUD) 的一种方法

前言:主要是利用SqlServer 的链接服务器功能 1.准备一台 SqlServer Server,服务如下图: 这台服务器专门用于 链接服务器 IP:10.x.x.3 和数据源服务器(10.x.x.5) 在一个局域网 1.1 版本 是 2017 2.在 10.…

监控平台zabbix对接grafana

目录 1.安装grafana并启动 2.浏览器访问 3.导入zabbix数据,对接grafana 4.如何导入模板 5.使用zabbix监控nginx并发量连接数 5.1 修改nginx配置 5.2 编写监控数据脚本 5.3 设置键值 5.4 在zabbix web端完成自定义监控项 5.5 连接到grafana 以上一篇博客&l…

前端面试题7(单点登录)

如何实现单点登录 单点登录(Single Sign-On,简称SSO)是一种允许用户在多个应用系统中只需登录一次,就可以访问所有相互信任的应用系统的认证技术。实现前端单点登录主要依赖于后端的支持和一些特定的协议,如OAuth、Ope…

使用Github Actions自建Docker镜像仓库

使用Github Actions自建Docker镜像仓库 背景使用Github Actions自建Docker镜像仓库fork项目[docker_image_sync](https://github.com/xqxyxchy/docker_image_sync)获取云厂商容器镜像服务信息配置github secrets运行github action配置需要同步的镜像同步后效果华为云配置 背景 …

一.1.(3)半导体二极管基本电路的分析方法及常见应用电路

1.二极管基本电路的分析方法 先标正负极,再看是否理想二极管 将二极管视为断路,求两端电压 两端电压均大于导通电压,压差大的先导通(由于电源不是完全的阶跃,而是有一个电压爬升的过程) 2.常见应用电路 1.求…

V3.76 ViVaCut高级版本!已经开启永久订阅!一款专业视频剪辑软件

在短视频和社交媒体盛行的今天,视频内容的创作和分享已经成为人们日常生活的一部分。为了满足广大视频创作者的需求,一款专业视频剪辑软件应运而生,以其强大的功能和用户友好的界面,为用户提供了全新的视频编辑体验。他提供了众多…