C++静态全局变量问题
C++中,在文件中,类外,声明一个非静态变量,这个就是全局变量,它的作用域是全局的,链接时个编译单元一起
C++中,在文件中,类外,声明一个静态变量,这个就是静态全局变量,作用域是编译单元,因此同一个全局静态变量链接时不会报重复链接错误
#pragma once #include<vector> class MyClass { public: void Test(); float Testfloat(); }; std::vector<int> g_vec; //全局变量,被多个文件包含会链接错误【重复的符号】 static std::vector<int> gs_vec; //静态全局变量,被多个文件包含时,每个文件中一个实例
全局变量的正确用法:
方式一,声明中使用extern
1,头文件中声明, MyClass.h
#pragma once #include<vector> class MyClass { public: void Test(); float Testfloat(); }; extern std::vector<int> g_vec;
2,任意CPP中定义: MyClass.cpp
#include <vector> //#include "myheader.h" std::vector<int> g_vec;
3,#include"MyClass.h"后使用
#include "MyClass.h" int main() { g_vec.push_back(10); }
方式二,使用时用extern
1,头文件中声明, MyClass.h
#pragma once
#include<vector>
class MyClass
{
public:
void Test();
float Testfloat();
};
std::vector<int> g_vec;
2, extern 后使用,不需要#include"MyClass.h"
extern std::vector<int> g_vec;
int main() { g_vec.push_back(10); }