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); }
  • 相关阅读:
    c# 并行运算二
    c# 并行运算
    Task+http请求
    Task多线程
    SSO系统认证
    web系统权限设计
    AutoMapper的使用
    中间件
    express-middleware
    中间件概念
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/13540768.html
Copyright © 2011-2022 走看看