c++定义全局变量详解
在C++中定义全局变量是应该尽量在.cpp文件中定义,而不要在.h 文件中 定义,定义好了之后,可以在.h文件中利用extern关键字进行声明。如果在.h文件中定义的话,多层包含可能会引起重复定义的错误。下面是一个示例:
在g_bash.cpp中定义全局变量:
// g_bash.cpp #include "g_base.h" int g_TicketCount = 0; // 定义全局变量并初始化
在g_bash.h文件中利用extern关键字进行声明:
// g_bash.h #ifndef G_BASE_H #define G_BASE_H extern int g_TicketCount; // 全局变量声明 #endif // G_BASE_H
然后在其他文件要使用这些变量的时候,只要#include "g_base.h"就可以了,而且不会引起重复定义的错误。main.cpp下引用示例:
#include <QCoreApplication> #include <iostream> #include g_base.h using namespace std; void proc() { cout<< proc(): <<endl; g_TicketCount++; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); cout<< g_TicketCount = << g_TicketCount << endl; proc(); cout<< g_TicketCount = << g_TicketCount << endl; return a.exec(); }
结果:
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
相关推荐
-
C/C++语言中全局变量重复定义问题的解决方法
前言 在C语言中使用extern 关键字来定义全局变量的时候,我们需要在.h文件和.c文件中重复定义,这种重复,导致了出错几率的增加. 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面.于是,想把自己的代码中的各个模块分离开来,以便更好地阅读和管理. 遇到的问题 我的做法是: 宏定义.结构体定义.函数声明以及全局变量定义放到一个head.h头文件中 函数的定义放到head.cpp中 main函数放到main.cpp中 然而却报错了,提示xxx变量在*.obj文件中已
-
一篇文章带你了解C++ static的作用,全局变量和局部变量的区别
目录 1.static的作用 2.staic全局变量和局部变量的区别,存储位置? 区别: 我们自底向上的方式进行讲解: 总结 1.static的作用 (1) 修饰局部变量时,只初始化一次,延长了局部变量生命周期,直到程序结束才释放. (2)修饰全局变量,全局变量智能在本文件访问,不能在其他文件访问. (3)修饰函数同修饰全局变量类似,只能在本文件调用,不能在其他文件调用. (4)不想被释放的时候,可用static修饰. (5)考虑数据安全性,如当程序需使用全局变量时,应优先考虑static. 2
-
基于C++全局变量的声明与定义的详解
(1)编译单元(模块)在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件:第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件.那么,错误可能在两个地方产生:一个,编译时的错误,这个主要是语法错误:一个,链接时的错误,主要是重复定义变量等.编译单元指在编译阶段生成的每个obj文件.一个obj文件就是一个编译单元.一个.cpp(.c)和它相应的.h文件共同组成了一个编译单元.一个工程由很多编译
-
解决C++全局变量只能初始化不能赋值的问题
C++中,全局变量只能声明.初始化,而不能赋值 也就是说,下面这样是不被允许的: #include <cstdio> using namespace std; int a; a = 2; int main() { return 0; } 错误提示是: C++ requires a type specifier for all declarations 声明.初始化与赋值的区别: 声明:int a; 初始化:int a = 2;(在声明的时候顺带赋值叫做初始化) 赋值:a = 2; 只有定义(i
-
C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别
局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序或代码块. 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用:在其它地方全局变量起作用. 全局变量在程序开始运行期间就已经在内存中开辟了内存空间,直到程序结束才会释放这块内存空间. 全局变量要在其他文件中使用,需显示的声明这个变量,使用extern关键字声明(extern int
-
c++定义全局变量详解
在C++中定义全局变量是应该尽量在.cpp文件中定义,而不要在.h 文件中 定义,定义好了之后,可以在.h文件中利用extern关键字进行声明.如果在.h文件中定义的话,多层包含可能会引起重复定义的错误.下面是一个示例: 在g_bash.cpp中定义全局变量: // g_bash.cpp #include "g_base.h" int g_TicketCount = 0; // 定义全局变量并初始化 在g_bash.h文件中利用extern关键字进行声明: // g_bash.h #i
-
Python函数中的全局变量详解
目录 1.什么是全局变量? 2.在函数外部定义的变量是全局变量. 3.在函数内部定义中添加global关键词后变成全局变量. 总结 1.什么是全局变量? 在Python中,全局变量指的是可以作用于函数内部和外部的变量. 在这里有两种情况:在函数的外部定义和内部定义添加global关键词变成全局变量. 2.在函数外部定义的变量是全局变量. 假设一个变量在函数的外部定义,那么这个函数就可以在函数的内部访问,也可以在函数的外部的访问. 示例:定义一个全局变量b,然后定义一个函数a,最后在该函数的内部和
-
go语言的变量定义示例详解
目录 前言 定义单个变量 定义多个变量 定义相同类型的多个变量 变量的初始化 变量类型的省略 var关键字的省略(简短声明) 全局变量与局部变量 特别的变量名 未使用变量的限制 常量 前言 特别说明: 本文只适合新手学习 这篇文章带我们入门go语言的定义变量的方式,其实和javascript很相似,所以特意总结在此. 在go语言中,也有变量和常量两种,首先我们来看变量的定义,定义变量我们分为定义单个变量和多个变量. 本文知识点总结如下图所示: 定义单个变量 在定义单个变量中,我们通过var关键字
-
MyBatis Properties及别名定义实例详解
上一篇我们介绍了mybatis的增删改查入门实例,我们发现在 mybatis-configuration.xml 的配置文件中,对数据库的配置都是硬编码在这个xml文件中,如下图,那么我们如何改进这个写法呢? 1.我们将 数据库的配置语句写在 db.properties 文件中 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=ro
-
Spring Data JPA 简单查询--方法定义规则(详解)
一.常用规则速查 1 And 并且 2 Or 或 3 Is,Equals 等于 4 Between 两者之间 5 LessThan 小于 6 LessThanEqual 小于等于 7 GreaterThan 大于 8 GreaterThanEqual 大于等于 9 After 之后(时间) > 10 Before 之前(时间) < 11 IsNull 等于Null 12 IsNotNull,NotNull 不等于Null 13 Like 模糊查询.查询件中需要自己加 % 14
-
关于js二维数组和多维数组的定义声明(详解)
声明一维数组:var goodsArr = []; 赋值:goodsArr[0] = 'First Value'; 这个毫无争议,因为平时使用PHP比较多,而php语法是可以直接使用goodsArr[0] = 'First Value'; 这种方法声明数组并赋值的,但js不能这样使用,必须先声明数组存在.同理,如果是二维和多维数组在使用前也必须声明二维和多维的数组,举例二维数组: var goodsArr[0] = []; 必须先这样声明一下二维数组才能使用二维数组,否则会出错的. 以上就是小编
-
C++中可以接受任意多个参数的函数定义方法(详解)
能够接受任意多个参数的函数,可以利用重载来实现.这种函数的执行过程类似于递归调用,所以必须要有递归终止条件. #include <iostream> #include <bitset> void print() {} // 递归终止条件.这是必需的. template<typename Type, typename... Types> void print(const Type& arg, const Types&... args) { std::cou
-
汇编基础教程段的定义应用详解
目录 段 种类 代码段 数据段 DS和[address] 栈段 栈 操作方式 8086CPU提供入栈和出栈指令 栈顶超界的问题 push.pop指令 PUSH(入栈) POP(出栈) 栈段定义 思考 访问 段前缀 场景1 场景2 段 将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元 种类 代码段 定义 对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段. 可以将长度为 N( N≤64KB )的一组代码,存在一组地址连续.起始地址为 16的倍数的内存单元中,
-
计算机程序设计并行计算概念及定义全面详解
目录 1 摘要 2 概述 2.1 什么是并行计算? 2.2 为什么要并行计算? 2.3 谁都在使用并行计算? 科学界和工程界: 工业界和商业界: 全球应用: 3 概念和术语 3.1 冯诺依曼体系结构 3.2 弗林的经典分类 3.3 一些常见的并行计算术语 3.4 并行程序的缺陷和代价 复杂性: 可移植性: 资源需求: 可扩展性: 4 并行计算机的内存架构 4.1 共享内存 统一内存存取(Uniform Memory Access): 非统一内存存取(Non-Uniform Memory Acce
-
MyBatis Properties及别名定义实例详解
上一篇我们介绍了mybatis的增删改查入门实例,我们发现在 mybatis-configuration.xml 的配置文件中,对数据库的配置都是硬编码在这个xml文件中,如下图,那么我们如何改进这个写法呢? 1.我们将 数据库的配置语句写在 db.properties 文件中 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=ro
随机推荐
- 浅谈利用JavaScript进行的DDoS攻击原理与防御
- 学习YUI.Ext 第六天--关于树TreePanel(Part 1)
- jQuery构造函数init参数分析
- jQuery中ajax的post()方法用法实例
- jQuery实现table中的tr上下移动并保持序号不变的实例代码
- spring cloud学习教程之config修改配置详解
- 一个简单的asp.net 单点登录实现
- asp.net利用存储过程实现模糊查询示例分享
- php将字符串随机分割成不同长度数组的方法
- 优化Python代码使其加快作用域内的查找
- MySQL WorkBench管理操作MySQL教程
- VBS加密14法你会几种 VBS加密免杀浅谈
- Javascript 动态改变imput type属性
- 微信小程序 scroll-view实现上拉加载与下拉刷新的实例
- C#生成code128条形码的方法
- PHP 模板高级篇总结
- Mac MySQL重置Root密码的教程
- Python内存管理实例分析
- 实例讲解MySQL中乐观锁和悲观锁
- Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】