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); }

 

posted @ 2020-08-21 14:15  时空观察者9号  阅读(465)  评论(0编辑  收藏  举报