zoukankan      html  css  js  c++  java
  • 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); }
  • 相关阅读:
    Volley(二)—— 基本Request对象 & RequestQueue&请求取消
    进程ps、kill 、grep
    vi常用命令
    查看linux系统版本
    linux下U盘的读取
    linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
    Python 列表
    Python 数据运算
    Python pyc知识了解
    Python for循环
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/13540768.html
Copyright © 2011-2022 走看看