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


前言

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

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


一、extern的使用

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

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

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

二、容易犯的错误

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

//a.cpp
#include "a.h"
int num_a=10;

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

using namespace std;
extern int num_a=10;

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

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


猜你喜欢

转载自blog.csdn.net/weixin_45667108/article/details/126961807