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

发表于:2015-7-29 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hrhguanli    来源:51Testing软件测试网采编

  启动错误的做法
  在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。
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • BDYD
    2015-8-06 15:23:33

     **于达校区严格遵循**总部的教学体系,秉承**“教育改变生活”理念,传承**“源自北大,永不妥协的教育品质”精神,集**于达校区多年经验,为上海地区**总部唯一授权软件测试培训中心,是**多课程高质量高就业校区。
    选择上海**,教育改变生活!选择**于达校区,成就你我!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号