深圳幻海软件技术有限公司 欢迎您!

C++ 全局变量的跨文件使用

2023-09-05

文章目录前言一、extern的使用二、容易犯的错误前言在写C++工程文件的时候,往往会用到一些所有类都使用的数据,比如数据文件等,一种写法是写成静态类,调用数据时使用类名加属性名的形式,另一种时写成全局变量的形式。C++工程组织结构是按照xx.h文件中写函数/类的声明,xx.cpp文件中写函数的定义

文章目录

  • 前言
  • 一、extern的使用
  • 二、容易犯的错误


前言

在写C++工程文件的时候,往往会用到一些所有类都使用的数据,比如数据文件等,一种写法是写成静态类,调用数据时使用类名加属性名的形式,另一种时写成全局变量的形式。

C++工程组织结构是按照xx.h文件中写函数/类的声明,xx.cpp文件中写函数的定义,所以对于全局变量而言,比较合适的写法是为这些全局变量专门建立一个文件对。


一、extern的使用

全局变量在工程中往往是跨文件使用的,比如在a.h中定义的变量要在b.cpp,c.cpp文件中使用。

//a.h
using namespace std;
extern int num_a;
  • 1
  • 2
  • 3
//b.cpp
#include "a.h"
void print(){
cout<<num_a<<endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5

如果此时在全局变量num_a声明的时候没有添加修饰词extern则不能跨文件调用。

二、容易犯的错误

在使用全局变量前,要注意满足 “先声明,后定义,再使用”的原则,即在a.h中声明了num_a变量,需要在a.cpp文件中赋值/定义。定义时不需要再写extern,但仍需写int。(事实上在其他任何一个cpp文件中定义都可以,不过最好在同名的文件中方面debug)。

//a.cpp
#include "a.h"
int num_a=10;
  • 1
  • 2
  • 3

常见的错误
错误1:未在cpp中定义就直接使用。这种通常会报错为 “”找不到xx变量“
错误2:直接在a.h中定义,即

using namespace std;
extern int num_a=10;
  • 1
  • 2

如果仅有一个cpp文件include了a.h可能不会报错,当有多个cpp文件include这个头文件,则会报 “变量重复定义”的错误。
需要区分的是,当变量定义在类内时,是可以直接赋值的。例如:

using namespace std;
class test{
private:
int num_a=10;
public:
test();
}
```


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览51117 人正在系统学习中