• c++ 使用全局变量的方法多个文件



    启动错误的做法

    在global.h声明和定义变量

    int sharedData = 9;
    编译出错
    Building target: CTest
    Invoking: GCC C++ Linker
    g++  -o "CTest"  ./src/CTest.o ./src/global.o   
    ./src/global.o:(.data+0x0): `sharedData'被多次定义
    ./src/CTest.o:(.data+0x0):第一次在此定义
    collect2: 错误: ld 返回 1

    正确的做法。

    在global.h头文件声明

    extern int sharedData ;


    在global.cpp定义初始化

    int sharedData = 9;

    然后在其它文件直接调用就能够了

    int main(void)
    {
    	cout<<sharedData<<endl;
    
    return 0;
    }

    不用包括头文件,直接在调用之前声明一下也能够。

    extern int sharedData ;

    看一下编译

    make all 
    Building file: ../src/CTest.cpp
    Invoking: GCC C++ Compiler
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/CTest.d" -MT"src/CTest.d" -o "src/CTest.o" "../src/CTest.cpp"
    Finished building: ../src/CTest.cpp
     
    Building file: ../src/global.cpp
    Invoking: GCC C++ Compiler
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/global.d" -MT"src/global.d" -o "src/global.o" "../src/global.cpp"
    Finished building: ../src/global.cpp
     
    Building target: CTest
    Invoking: GCC C++ Linker
    g++  -o "CTest"  ./src/CTest.o ./src/global.o   
    Finished building target: CTest


    第一步

    CTest.cpp编译为CTest.o  此处其有用到了global文件的变量,因为此阶段仅仅须要包括头文件,让CTest.cpp知道global文件变量的声明就可以。


    第二部

    global.cpp编译为global.o


    第三部

    链接CTest.o和global.o  ,生成可运行文件CTest。






    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    C++快速排序
    C++冒泡排序
    为什么Excel创建一个新的工作簿就会初始化三个worksheet
    为什么游戏需要英雄
    2015.11.18——Lua中文教程
    [国家集训队2012]JZPFAR
    后缀数组小结?
    [BZOJ 2738]矩阵乘法
    [BZOJ 3221][Codechef FEB13] Obserbing the tree树上询问
    [BZOJ 4999]This Problem Is Too Simple!
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4680683.html
Copyright © 2020-2023  润新知