Qt中全局变量的使用

一般在项目中想要定义一个变量可以被多个类进行访问,此时就可以定义全局变量。习惯上会将项目中所有类都用到的变量,集中定义在一个头文件中,使用时只需包含此头文件。但是对于我这样基础不牢靠的人,就犯了一个错误,而且当时怎么也没找到原因。
最后在别人的帮助下,得以解决。现记录一下。

#ifndef DATASET_H
#define DATASET_H#include <QMutex>
#include <QWaitCondition>
//#include <QVector>
#include <QQueue>#define MaxSize 300
#define CurrentN 0
#define ExpectedN 500static uint32_t maxStoreNum = MaxSize;//最大存储量
static uint32_t  currentNum = CurrentN;//当前存储量
static uint32_t  preStoreNum = ExpectedN;//预计存储量500QQueue<quint8> queue;QMutex mutex;
QWaitCondition fullCondition;//消费者等待不为空(消费太快)
QWaitCondition emptyCondition;//生产者等待为空(生产太多)#endif // DATASET_H

这个文件看似正常,实际上当在其它类中包含该头文件,编译项目时会出现下面的错误:
在这里插入图片描述
说是变量重定义,此时就很容易走偏。对于问题重定义的可能有以下几点:

  1. 头文件重复包含;
  2. 重名的变量被定义;
  3. 可能是编译生成的文件makefile中多编译了一遍;
  4. .pro文件在源文件中多包含了一遍。
    反复查看,终不得果。究其原因是因为头文件定义的全局变量有问题,造成了多次定义。正确的写法是:

头文件中定义全部变量,需要在变量前添加关键字extern声明变量,然后再在.cpp文件中定义变量。

所以正确的写法是:
DataSet.h

#ifndef DATASET_H
#define DATASET_H#include <QMutex>
#include <QWaitCondition>
//#include <QVector>
#include <QQueue>#define MaxSize 300
#define CurrentN 0
#define ExpectedN 500static uint32_t maxStoreNum = MaxSize;//最大存储量
static uint32_t  currentNum = CurrentN;//当前存储量
static uint32_t  preStoreNum = ExpectedN;//预计存储量500extern QQueue<quint8> queue;extern QMutex mutex;
extern QWaitCondition fullCondition;//消费者等待不为空(消费太快)
extern QWaitCondition emptyCondition;//生产者等待为空(生产太多)#endif // DATASET_H

DataSet.cpp

#include "DataSet.h"QQueue<quint8> queue;
QMutex mutex;
QWaitCondition fullCondition;
QWaitCondition emptyCondition;

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

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

相关文章

强推!2019年最火的容器、K8S和DevOps入门都在这了

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a; Pasca来源&#xff1a;蛋蛋团&#xff08;ID&#xff1a;dandan_tua…

Tomcat10 下载和配置 Linux 环境

文章目录1. 下载Tomat2. 复制链接地址3. 下载4. 解压Tomcat5. 赋予权限6. 启动tomcat7. 监控日志8. linux防火墙9. 浏览器验证1. 下载Tomat tomcat官网&#xff1a;https://tomcat.apache.org/download-10.cgi 2. 复制链接地址 3. 下载 wget https://downloads.apache.org/t…

qt求一个区间的随机数

举例说明&#xff1a; 求65-90之间的随机数 qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); quint8 ch (quint8)qrand()%25 65;先种随机数种子&#xff0c;然后求随机数。65到90之间相差25&#xff0c;先求0-25的随机数&#xff0c;然后在此基础上加65&#xff0c;其范…

Elastic全球用户大会Elastic{ON}首次落地北京

2019年4月10日&#xff0c;全球领先的大数据搜索软件公司Elastic&#xff08;Elasticsearch和Elastic Stack的开发公司&#xff09;一年一度的全球用户大会Elastic首次来到中国&#xff0c;在北京盛大开幕。来自全国的开发人员、合作伙伴和IT行业人士齐聚一堂&#xff0c;了解和…

Jenikns新建节点、配置节点、新建任务、配置任务、脚本验证

Jenkins节点概念&#xff1a; 1、Jenkins的节点就相当于一个服务器的环境配置容器 2、Jenkins的节点可以是多个的&#xff0c;一个UATEnv节点相当于一个UAT环境配置容器 3、Jenkins的节点就相当于把一个服务器的环境配置信息&#xff0c;都配置到了节点中&#xff0c;运行节点就…

Windows OpenGL ES 图像色阶

目录 一.OpenGL ES 图像色阶 1.原始图片2.效果演示 二.OpenGL ES 图像色阶源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

qt使用动画提示正在载中

当程序加载较慢的时候&#xff0c;为了告知用户正在加载&#xff0c;需要在界面上显示正在加载中的提示。下面简单说一下自己使用中出现的问题。 一、在主线程中使用动画加载 创建基于qapplication的项目&#xff0c;以qdialog类为基类&#xff0c;有.ui文件。 项目的结构如下…

云存储精华问答 | 云存储的优势在哪?

云存储是一种网上在线存储&#xff08;英语&#xff1a;Cloud storage&#xff09;的模式&#xff0c;即把数据存放在通常由第三方托管的多台虚拟服务器&#xff0c;而非专属的服务器上。今天就让我们来看看关于云陈存储的精华问答吧。1Q&#xff1a;云存储是如何分类的&#x…

Github上Fork部署应用程序

Github上Fork部署应用程序 1. Fork简述及作用2. 登录Github&#xff0c;搜索项目3. Github上打开fork的部署应用4. 点击Fork&#xff0c;并确认邮件5. 登录自己的github&#xff0c;查看fork的项目 1. Fork简述及作用 Fork作用&#xff1a;获得代码修改的权限 简述&#xff1a…

Windows OpenGL 图像色阶

目录 一.OpenGL 图像色阶 1.原始图片2.效果演示 二.OpenGL 图像色阶源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习…

qt解决循环创建的控件,每个都绑定相同的槽函数时出现的一对多响应问题

应用场景 若需要在程序运行期间根据控件数动态创建控件&#xff0c;且创建的每一个控件在某一个信号发生时会触发相同的槽函数。 问题描述 上述所导致的问题是在触发其中一个控件的时候&#xff0c;其它的控件也会响应该槽函数&#xff0c;出现了一对多的绑定。 示例 clas…

用栈和队列分别实现求解迷宫问题(c++,c)

求解迷宫问题&#xff1a;给定一个迷宫要求输出其路径。 给出的迷宫如下&#xff08;可自行更改&#xff09; 可用两种方法实现1.栈2.队列 用栈只能找到路但路不是最简的最简的要用队列实现 用栈实现&#xff08;解析都在代码里了&#xff09; c&#xff08;实现&#xff0…

高达100亿美元!美国国防部将IBM和甲骨文双双踢出了云计算合同;华为任正非说了,华为对向苹果等对手出售5G芯片保持开放的态度...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 微软全数位版本Xbox One S&a…

OpenGL 灰度图

目录 一.OpenGL 灰度图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 灰度图 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 &…

将Github中Fork的代码,克隆到本地

将Github中Fork的代码&#xff0c;克隆到本地 1. 在Github打开Fork的工程2. 单击clone or download按钮&#xff0c;复制Github克隆链接3.进入本地需要存储应用源程序的路径 将源代码clone到本地 1. 在Github打开Fork的工程 登录Github&#xff0c;点击Fork的项目即可&#xf…

Windows OpenGL ES 图像灰度图

目录 一.OpenGL ES 图像灰度图 1.原始图片2.效果演示 二.OpenGL ES 图像灰度图源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 Open…

VMware竟然出了一款防火墙

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;防火墙&#xff0c;这个在安全界“恐龙时代”就存在的产品&#xff0c;相信但凡…

qt项目中的某一个类的输出中文信息乱码,其它类中文输出正常

问题描述 qtcreate5.13.2中整个项目中通过添加头文件&#xff0c;使用qDebug()输出中文打印信息&#xff0c;输出中文都是正常的&#xff0c;但是有一个类的输出中文是乱码。 解决方法 修改该类的编码格式。由于项目默认采用的是utf-8编码&#xff0c;但此类的编码采用的是G…

Navicat创建数据库表 、导入sql文件,生成表结构

Navicat创建数据库表 、导入sql文件&#xff0c;生成表结构 1.打开Navicat2.远程连接mysql连接3.创建数据库4.导入sql文件5.生成表结构 1.打开Navicat 2.远程连接mysql连接 3.创建数据库 4.导入sql文件 导入源代码中的sql文件 5.生成表结构

将本地源代码程序推送远程Github仓库

将本地源代码程序推送远程Github仓库 1.查看改动文件的状态2.将修改的代码从工作区添加至暂存区3.将暂存区的代码添加至本地仓库4.将本地仓库中的代码Push到Github5.登录Github&#xff0c;查看是否推送代码成功 1.查看改动文件的状态 git status2.将修改的代码从工作区添加至…