当前位置: 首页 > news >正文

error: C2039: “qt_metacast“: 不是 “***“ 的成员

报错信息:

error C2039: "qt_metacast": 不是 "radartrack::Base_track_data" 的成员

最近在使用Qt开发,自定义的数据类在继承数据抽象类和QObject类时总是报“qt_metacast 不是不是 "radartrack::Base_track_data" 的成员”。

数据描述:

抽象数据类:

//
// Created by qiaowei on 2023-12-17.
//#ifndef RADARDATACONTROLLER_BASE_TRACK_DATA_H
#define RADARDATACONTROLLER_BASE_TRACK_DATA_H#include <QObject>
#include <QString>namespace radartrack {/*********************************************************************************************** @copyright 2003-2023* @date      2023-12-18* @author    qiao wei* @version   1.0* @brief     雷达数据接口。* @history*********************************************************************************************/class Base_track_data {public:virtual void set_track_data(const QString& qstring_format_track_data) = 0;virtual QString qstring_format_track_data() = 0;virtual QMap<QString, QString>* qmap_format_track_data() = 0;};} // radartrack#endif //RADARDATACONTROLLER_BASE_TRACK_DATA_H

 

//
// Created by qiaowei on 2023-12-17.
//#include "base_track_data.h"namespace radartrack {
} // radartrack

数据类:

//
// Created by qiaowei on 2023-12-14.
//#ifndef RADARDATACONTROLLER_TRACK_DATA_H
#define RADARDATACONTROLLER_TRACK_DATA_H#include <QObject>
#include <QMap>
#include "base_track_data.h"using radartrack::Base_track_data;namespace radartrack {/*********************************************************************************************** @copyright 2003-2023* @date      2023-12-14* @author    qiao wei* @version   1.0* @brief     雷达数据类。以QString和QMap两种格式保存雷达数据,雷达数据类将读入的QString格式数据处理为*            QMap格式并保存。* @history*********************************************************************************************/class Track_data : public Base_track_data, public QObject {Q_OBJECTpublic:/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   Constructor。创建实例时传入QString格式雷达数据track_data和参数parent,调用函数,将*          QString格式雷达数据处理为QMap格式雷达数据并保存。* @param   qstring_format_track_data QString格式雷达数据。* @param   parent 父类参数。* @return* @throws*****************************************************************************************/explicit Track_data(QString qstring_format_track_data, QObject* parent = nullptr);/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   Copy constructor。* @param   right_value 赋值的TrackData变量。* @return* @throws*****************************************************************************************/explicit Track_data(const Track_data& right_value);/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   Assignment operator=。* @param   right_value 赋值的TrackData变量。* @return  赋值后的变量。* @throws*****************************************************************************************/Track_data& operator=(const Track_data& right_value);virtual ~Track_data() override;/******************************************************************************************* @date    2023-12-17* @author  qiao wei* @version 1.0* @brief   根据传入的字符串,设置QString格式雷达数据,QMap格式雷达数据。* @param   qstring_format_track_data 传入的QString格式雷达数据。* @return* @throws*****************************************************************************************/virtual void set_track_data(const QString& qstring_format_track_data);/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   返回QString格式雷达数据。* @param* @return  QString格式雷达数据。* @throws*****************************************************************************************/virtual QString qstring_format_track_data() const;/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   返回QMap格式雷达数据。* @param* @return  QMap格式雷达数据。* @throws*****************************************************************************************/virtual QMap<QString, QString>* qmap_format_track_data() const;private:/******************************************************************************************* @date    2023-12-17* @author  qiao wei* @version 1.0* @brief   根据传入的QString格式雷达数据,更新QMap格式雷达数据(如原雷达数据不为空,先删除过期*          的雷达数据)。* @param   qstring_format_track_data QString格式雷达数据。* @return* @throws*****************************************************************************************/void updateTrackDataInQMapByQString(const QString& qstring_format_track_data);private:/******************************************************************************************* @date   2023-12-14* @author qiao wei* @brief  字符串格式雷达数据。*****************************************************************************************/QString qstring_format_track_data_;/******************************************************************************************* @date   2023-12-17* @author qiao wei* @brief  分析后的雷达数据,保存在QMap类型中。*****************************************************************************************/QMap<QString, QString>* qmap_format_track_data_;};} // radartrack#endif //RADARDATACONTROLLER_TRACK_DATA_H

//
// Created by qiaowei on 2023-12-14.
//#include "track_data.h"
#include "constant_variable.h"using radartrack::kNone;
using radartrack::kTime;namespace radartrack {Track_data::Track_data(QString qstring_format_track_data,QObject* parent) :QObject(parent),qstring_format_track_data_{qstring_format_track_data},qmap_format_track_data_{new QMap<QString, QString>} {updateTrackDataInQMapByQString(qstring_format_track_data_);}Track_data::Track_data(const Track_data& right_value) {if (this != &right_value) {qstring_format_track_data_ = right_value.qstring_format_track_data_;updateTrackDataInQMapByQString(qstring_format_track_data_);}}Track_data& Track_data::operator=(const Track_data& right_value) {if (this == &right_value) {return *this;}qstring_format_track_data_ = right_value.qstring_format_track_data_;updateTrackDataInQMapByQString(qstring_format_track_data_);return *this;}Track_data::~Track_data() {// 释放实例变量的指针资源。delete qmap_format_track_data_;qmap_format_track_data_ = nullptr;}void Track_data::set_track_data(const QString& qstring_format_track_data) {// 更新QString格式和QMap格式的雷达数据。qstring_format_track_data_ = qstring_format_track_data;updateTrackDataInQMapByQString(qstring_format_track_data);}QString Track_data::qstring_format_track_data() const {return qstring_format_track_data_;}QMap<QString, QString>* Track_data::qmap_format_track_data() const {return qmap_format_track_data_;}void Track_data::updateTrackDataInQMapByQString(const QString& qstring_format_track_data) {// 获取文本格式的时间数据,将时间数据保存到map变量。QString data_time{qstring_format_track_data.mid(0, 8)};// 检查qmap_format_track_data_变量是否为空,如果不为空,使用clear函数清空数据。if (!qmap_format_track_data_->isEmpty()) {qmap_format_track_data_->clear();}qmap_format_track_data_->insert(kTime, data_time.trimmed());// 获取剩余的雷达数据。QStringList string_list = qstring_format_track_data.mid(11).split(",");QStringList key_value_group;// 遍历QString格式的雷达数据,保存到map变量中。QStringList::Iterator iterator = string_list.begin();while (string_list.end() != iterator) {if (iterator->contains("=")) {key_value_group = iterator->split("=");if (2 == key_value_group.count()) {if (key_value_group[1].isEmpty()) {key_value_group[1] = kNone;}// 将key/value保存到QMap中,去除数据的空格。将航班号的方括号去除。qmap_format_track_data_->insert(key_value_group[0].trimmed(),key_value_group[1].trimmed().replace("[", "").replace("]", ""));}}++iterator;}}} // radartrack

添加Q_OBJECT宏时在编译数据类时就出现了本文最开始的问题,去掉Q_OBJECT宏时可以成功编译。

原因分析:

导致错误的原因可能是多继承时,继承QObject并加入Q_OBJECT宏的时候,QT环境下在编译的时候会以第一个继承的对象(模板?)来生成对应的moc文件,如果带有Q_OBJECT宏,必须把QObject放在第一个继承的位置。

解决方案:

更换数据类Track_data的继承顺序为public QObject, public Base_track_data的位置,成功解决问题。更改后代码如下:

//
// Created by qiaowei on 2023-12-14.
//#ifndef RADARDATACONTROLLER_TRACK_DATA_H
#define RADARDATACONTROLLER_TRACK_DATA_H#include <QObject>
#include <QMap>
#include "base_track_data.h"using radartrack::Base_track_data;namespace radartrack {/*********************************************************************************************** @copyright 2003-2023* @date      2023-12-14* @author    qiao wei* @version   1.0* @brief     雷达数据类。以QString和QMap两种格式保存雷达数据,雷达数据类将读入的QString格式数据处理为*            QMap格式并保存。* @history*********************************************************************************************/class Track_data : public QObject, public Base_track_data {Q_OBJECTpublic:/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   Constructor。创建实例时传入QString格式雷达数据track_data和参数parent,调用函数,将*          QString格式雷达数据处理为QMap格式雷达数据并保存。* @param   qstring_format_track_data QString格式雷达数据。* @param   parent 父类参数。* @return* @throws*****************************************************************************************/explicit Track_data(QString qstring_format_track_data, QObject* parent = nullptr);/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   Copy constructor。* @param   right_value 赋值的TrackData变量。* @return* @throws*****************************************************************************************/explicit Track_data(const Track_data& right_value);/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   Assignment operator=。* @param   right_value 赋值的TrackData变量。* @return  赋值后的变量。* @throws*****************************************************************************************/Track_data& operator=(const Track_data& right_value);virtual ~Track_data() override;/******************************************************************************************* @date    2023-12-17* @author  qiao wei* @version 1.0* @brief   根据传入的字符串,设置QString格式雷达数据,QMap格式雷达数据。* @param   qstring_format_track_data 传入的QString格式雷达数据。* @return* @throws*****************************************************************************************/virtual void set_track_data(const QString& qstring_format_track_data);/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   返回QString格式雷达数据。* @param* @return  QString格式雷达数据。* @throws*****************************************************************************************/virtual QString qstring_format_track_data() const;/******************************************************************************************* @date    2023-12-14* @author  qiao wei* @version 1.0* @brief   返回QMap格式雷达数据。* @param* @return  QMap格式雷达数据。* @throws*****************************************************************************************/virtual QMap<QString, QString>* qmap_format_track_data() const;private:/******************************************************************************************* @date    2023-12-17* @author  qiao wei* @version 1.0* @brief   根据传入的QString格式雷达数据,更新QMap格式雷达数据(如原雷达数据不为空,先删除过期*          的雷达数据)。* @param   qstring_format_track_data QString格式雷达数据。* @return* @throws*****************************************************************************************/void updateTrackDataInQMapByQString(const QString& qstring_format_track_data);private:/******************************************************************************************* @date   2023-12-14* @author qiao wei* @brief  字符串格式雷达数据。*****************************************************************************************/QString qstring_format_track_data_;/******************************************************************************************* @date   2023-12-17* @author qiao wei* @brief  分析后的雷达数据,保存在QMap类型中。*****************************************************************************************/QMap<QString, QString>* qmap_format_track_data_;};} // radartrack#endif //RADARDATACONTROLLER_TRACK_DATA_H

相关文章:

error: C2039: “qt_metacast“: 不是 “***“ 的成员

报错信息&#xff1a; error C2039: "qt_metacast": 不是 "radartrack::Base_track_data" 的成员 最近在使用Qt开发&#xff0c;自定义的数据类在继承数据抽象类和QObject类时总是报“qt_metacast 不是不是 "radartrack::Base_track_data" 的成员…...

量子计算:开启IT领域的新时代

量子计算&#xff1a;开启IT领域的新时代 一、量子计算的基本原理与背景 量子计算作为一项前沿高级技术&#xff0c;正逐渐引起IT领域的广泛关注。传统计算机是通过二进制位&#xff08;0和1&#xff09;来储存和处理信息&#xff0c;而量子计算机则利用量子位或称为“量子比特…...

数据可视化---柱状图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...

第十七章 爬虫scrapy登录与中间件2

文章目录 数据盘区太快会报错&#xff0c;setting中配置延迟 连接提取器...

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。 在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c; 用户也可以自定义Service Account&#xff0c;与Service…...

某电子文档安全管理系统存在任意用户登录漏洞

漏洞简介 某电子文档安全管理系统存在任意用户登录漏洞&#xff0c;攻击者可以通过用户名获取对应的cookie&#xff0c;登录后台。 资产测绘 Hunter语法&#xff1a;web.icon“9fd216c3e694850445607451fe3b3568” 漏洞复现 获取Cookie POST /CDGServer3/LinkFilterServi…...

音视频参数介绍

一、视频参数概念 单个视频帧&#xff1a;可以简单地理解成为一张图片 单个视频帧主要的参数概念&#xff1a; 分辨率&#xff1a; 分辨率是指图像或显示器上像素的数量&#xff0c;通常用横向像素数乘以纵向像素数表示。例如&#xff0c;1920x1080 表示宽度为1920像素&…...

vue中使用minio上传文件

创建一个 文件getOssClient import { getOssSetting } from "/api/common"; import Vue from "vue"; import { getCookies, getLocal } from "/utils/auth"; // get token from cookie export async function getStsToken() {//从后台获取stsTo…...

MySQL表的增删改查(初阶)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查&#xff08;CRUD&#xff0c;create&#xff0c;retrieve&#xff0c;update&#xff0c;delete&#xff09;数据库的核心模块。 1. 新增&#xff08;Create&#xff09; 实…...

搜维尔科技:关于“第九届元宇宙数字人设计大赛”线上+线下巡回宣讲本周高校行程通告!

为了让大家更全面地了解此次大赛&#xff0c;顺利地进行大赛的报名和参赛&#xff0c;组委会遴选了一批优秀讲师代表&#xff0c;组建了宣讲团&#xff0c;以线上线下的方式陆续开展巡回宣讲。宣讲兼顾不同学生群体的需求&#xff0c;结合在数字人设计制作的过程中常见的疑难点…...

Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!

Gemini 1.0&#xff1a;Google推出的全新AI模型&#xff0c;将改变生成式人工智能领域的游戏规则&#xff01; &#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 …...

excel打开并操作CAD(excel-vba实现)_另附:CAD打开excel

excelvba可实现调用cad应用程序&#xff0c;并通过excel内置api弹窗实现打开、另存CAD 文件&#xff08;cad-vba弹窗功能较为麻烦&#xff09;&#xff0c;代码如下&#xff08;在excel_vba环境下操作&#xff09;&#xff1a; Sub excel_vba打开另存并操作CAD文件() Dim cad …...

Prolist组件实现动态竖排展示

实现原理&#xff1a;主要是利用外层div属性display:"flex",overflowX: auto&#xff0c;配合内层prolist样式属性flex:"0 0 auto",overflowX:"auto",width:"350px",height:900&#xff0c;实现动态竖排展示 <div style{{display:…...

基于JAVA的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…...

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用 1&#xff09;框架介绍与引入1.1.&#x1f680; 什么是 StreamPark1.2.&#x1f389; Features1.3.&#x1f3f3;‍&#x1f308; 组成部分1.4.引入 StreamPark 2&#xff09;安装部署2.1.环境要求2.2.Hado…...

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…...

docker服务启动报错docker.service holdoff time over, scheduling restart.

docker服务启动报错docker.service holdoff time over, scheduling restart. 卸载docker 卸载安装包 yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinu…...

cfa一级考生复习经验分享系列(八)

先分析一下CFA Level 1内容&#xff0c;考试总体难度并不大&#xff0c;每门课程都比大学本科开设的对应课程简单&#xff0c;但是因为有十门课综合在一起&#xff0c;知识点相对算比较多&#xff0c;内容较多。但对知识点的掌握要求不高&#xff0c;理解即可。比如财报&#x…...

React中的事件处理

React中的事件处理 亲爱的同学们&#xff0c;今天我们将一起探索React中的一个非常实用的话题&#xff1a;事件处理。当我们谈论事件处理&#xff0c;我们指的是在用户与我们的应用程序交互时发生的各种情况&#xff0c;比如点击一个按钮或是提交一个表单。这些动作是我们如何让…...

德人合科技 | 公司电脑文件加密系统

公司电脑文件加密系统是一种可以对电脑文件进行加密的保护机制。它使用驱动层透明加密技术&#xff0c;能够在用户无感知的情况下对文件进行加密&#xff0c;从源头上保障数据安全和使用安全。 PC端访问地址&#xff1a; www.drhchina.com 此类系统主要有以下几个特点和功能&a…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...