c++ 使用全局变量的方法多个文件

启动错误的做法

在global.h声明和定义变量

int sharedData = 9;

编译出错

Building target: CTest
Invoking: GCC C++ Linker
g++  -o "CTest"  ./src/CTest.o ./src/global.o
./src/global.o:(.data+0x0): `sharedData‘被多次定义
./src/CTest.o:(.data+0x0):第一次在此定义
collect2: 错误: ld 返回 1

正确的做法。

在global.h头文件声明

extern int sharedData ;

在global.cpp定义初始化

int sharedData = 9;

然后在其它文件直接调用就能够了

int main(void)
{
	cout<<sharedData<<endl;

return 0;
}

不用包括头文件,直接在调用之前声明一下也能够。

extern int sharedData ;

看一下编译

make all
Building file: ../src/CTest.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/CTest.d" -MT"src/CTest.d" -o "src/CTest.o" "../src/CTest.cpp"
Finished building: ../src/CTest.cpp

Building file: ../src/global.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/global.d" -MT"src/global.d" -o "src/global.o" "../src/global.cpp"
Finished building: ../src/global.cpp

Building target: CTest
Invoking: GCC C++ Linker
g++  -o "CTest"  ./src/CTest.o ./src/global.o
Finished building target: CTest

第一步

CTest.cpp编译为CTest.o  此处其有用到了global文件的变量,因为此阶段仅仅须要包括头文件,让CTest.cpp知道global文件变量的声明就可以。

第二部

global.cpp编译为global.o

第三部

链接CTest.o和global.o  ,生成可运行文件CTest。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

c++
使用全局变量的方法多个文件

时间: 2024-10-14 03:04:00

c++ 使用全局变量的方法多个文件的相关文章

python2.7 跨文件全局变量的方法

有关python实现跨文件全局变量的方法. 在使用Python编写的应用的过程中,有时会遇到多个文件之间传递同一个全局变量的情况.文件1:globalvar.py #!/usr/bin/env python2.7 class GlobalVar: db_handle = None mq_client = None def set_db_handle(db): GlobalVar.db_handle = db def get_db_handle(): return GlobalVar.db_han

c++多文件使用全局变量的方法

开始错误的做法 在global.h声明并定义变量 int sharedData = 9; 编译出错 Building target: CTest Invoking: GCC C++ Linker g++ -o "CTest" ./src/CTest.o ./src/global.o ./src/global.o:(.data+0x0): `sharedData'被多次定义 ./src/CTest.o:(.data+0x0):第一次在此定义 collect2: 错误: ld 返回 1 正

C语言:全局变量在多个c文件中公用的方法 [转]

用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用. 举例说明:项目文件夹project下有main.c.common.c和common.h三个文件,其中common.h文件分别#include在main.c和common.c文件中.现在希望声明一个字符型变量key,在main.c和common.c中公用.如下图所示: 有人想,既然是想两个文件都用,那就在common.h中声明一个unsigned

nodejs 全局变量和方法,以及console使用

A.nodejs的console有很多种类型: console.log(1),console.error(2),console.dir(3),console.time(4),console.timeEnd(5),console.trace(6).console.asstert(7). 眼花了吧,哈哈哈,这里经过使用以后我觉得,似乎console.log,可以替代2,3.可能因为语义的缘故吧. a.console.dir()主要用来输出一个object的结构信息. b.console.time('

教你用多种方法将pdf文件转换成jpg

我们在工作中经常会遇到pdf与word.excel.jpg等格式文件的转换,可是怎样才能把两种文件转换的完整有效呢?下面小编就pdf与jpg这两种格式来讲一下它们是如何转换的! pdf文件转换成jpg都有哪些方法? pdf文件转换成jpg有很多种方法,这里我们介绍最简单的三种,第一种是使用Adobe acrobat另存为jpg图片:另一种是在线将pdf转换成jpg; 还有一种方法可以使用第三方软件迅捷pdf转换器将pdf转换成jpg. 一.使用Adobe acrobat另存为jpg图片 用Ado

CALL TRANSFORMATION 的方法生成XML文件

*&---------------------------------------------------------------------**& Report  Z_BARRY_XML_CALL*&*&---------------------------------------------------------------------**& CALL TRANSFORMATION的方法生成XML例程*& 适用ECC5以上系统*& 普通方法生成

线程间通信的定义及全局变量的方法

作者:华清远见讲师 多进程和多线程是系统执行多任务机制的重要手段,多任务同时进行自然少不了相互之间的通信工作.下面先将线程间的通信方式总结一下,便于大家对比学习. 首先来说线程间的通信.因为多个线程是共享进程的空间的,所以线程之间的通信比较简单,主要是利用全局变量的方法.全局变量对进程内的的所有线程都是可见的,所以多个线程可以通过操作全局变量达到相互通信的效果.但是这也存在一个问题,就是"资源"的竞争. 这里所说的资源指的就是全局变量,正是因为这种竞争(因为多线程是同时运行的,而我们往

JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)

1.流的简述及演示案例输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出.字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表.获取对应的文字.在对这个文字进行操作.简单说:字节流+编码表字节流的两个顶层父类:1,InputStream 2,OutputStream.字符流的两个顶层父类:1,Reader 2,Writer String filePath = "F:\\demo.txt"; FileWriter f

shell文本处理——最基本方法压缩js文件

关于javascript代码文件的压缩在之前的文章中提到过(http://blog.csdn.net/u010487568/article/details/19701575),一般来说有三种方式: 仅压缩空白.注释等字符(最基本方法) 压缩空白.注释并替换变量名 压缩恐怖.注释.替换变量名,同时最小化文件所有的单词 最近在进一步学习shell,对这个古老的工具越发的感到高效便捷,因此对于这个主题实现了shell版本的最基本方法的实现. 主要的策略如下: 去除单行注释 去除换行符和制表符 压缩多个