C++多个文件共用一个全局变量

  • Post author:
  • Post category:其他


关键解决点是使用extern,还有就是理解C++声明、定义、赋值。

声明是告诉程序,这个地方有个变量,定义是为变量开辟空间,赋值是开辟空间后给值

一、基础用法

例如下面这个a.cpp程序:

#include "myhead.h"
#include <iostream>
int main()
{
    std::cout << a;
}

我明明没有定义a,为什么没有报错呢?原因在于我引入了我自定义的头文件#include “myhead.h”,下面是头文件中内容:

extern int a;

我们知道include作用只是代码搬运作用,即include作用是把myhead.h文件内代码复制到a.cpp。那么其实两个文件可以合并为:

#include <iostream>
extern int a;
int main()
{
    std::cout << a;
}

上面代码与平时代码还是有些区别就是多了一个extern,extern int a;其实就是声明,并没有定义,a真正在哪定义呢?可能是在另一个thrid.c文件中,thrid.cpp文件内容可能是:

int a;

到此为止a就是一个全局变量。为何是全局变量呢,例如a.c文件它直接引入一个#include “myhead.h”就直接用变量a的值了,假如再创建一个.cpp文件,此时再#include “myhead.h”那么也可以直接使用变量a了,这样就实现了全局功能

在a.cpp使用变量a时候可以为a赋值,这样就能更改a值了,如果a声明时候是一个const常量,那么a只可以使用,不可以改变

二、类与结构体作为全局变量

下面再看看如果是一个类,如何把这个类的一个实例作为全局的实例:

以类举例:

第一步,创建一个文件用于放类的定义(此定义不是那种开辟空间的定义),文件名为Student.h

#include <stdio.h>
class Student {
public: //类包含的变量
	char *name;
	int age;
	float score;
public: //类包含的函数
	void say() {
		printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);
	}
};

第二步,创建一个文件用于定义这个类实例Student.cpp

#include "Student.h"
Student stu;

第三步,之前那个myhead.h头文件中加入stu的声明

#include "Student.h"
extern int a;
extern Student stu;

最后任意一个文件的只要引入myhead.h头文件即可直接用stu,如在a.cpp文件中

#include "myhead.h"

#include <iostream>
int main()
{
	a = 8;
    std::cout << a;
	stu.name = "qqq";
	stu.say();
}



版权声明:本文为weixin_42034217原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。