C++多文件间函数调用及全局变量共享问题

C++多文件间函数调用及全局变量共享问题

涉及extern标识符声明:

常见多文件全局变量包含问题

 在.h文件中不要定义变量,通常为声明变量,定义变量会出现“error LNK2005: 已经在 .obj 中定义”类似这样的错误。根据c++规定,变量的声明必须同时满足两个条件:(1)声明必须使用extern关键字;(2)不能给变量赋初值

例:

extern int a; //声明
int  a; //定义
int  a = 0; //定义
extern int a = 0;  //定义

一、 多文件函数声明方式

在“.h”文件中将可共享函数前加上extern
例:
单个cpp程序

  void InitData(); //具体定义在对应源文件中

多个cpp程序

 extern void InitData(); //具体定义在对应源文件中

二、 全局变量声明方式

单个cpp程序

  int CouNum = 0; 
  unsigned char CommandLen = 0;

多个cpp程序
“.h”文件中声明

 extern int CouNum; 
 extern unsigned char CommandLen;

“.cpp”文件中定义及初始化

 extern int CouNum = 0; 
 extern unsigned char CommandLen = 0;

三 、注意数组类型声明方式

* 普通数组 *
单个cpp程序

  int CouNum[5]; 

多个cpp程序
“.h”文件中声明(注意数组[ ]内不标长度)

 extern int CouNum[];  

“.cpp”文件中定义及初始化

 extern int CouNum[5] = {0,1,2,3,4,5}; 

* 结构体数组 *
单个cpp程序

 typedef struct Cluster {
    int num; //簇内站点个数
    int NO[100]; //簇站点编号
    int classlabel; //簇标记
 }CLU; 
 CLU Clu_data[10];

多个cpp程序
“.h”文件中声明(注意数组[ ]内不标长度)

 typedef struct Cluster {
    int num; //簇内站点个数
    int NO[100]; //簇站点编号
    int classlabel; //簇标记
 }CLU; //头文件中定义结构体
 extern CLU Clu_data[];  //声明结构体数组

“.cpp”文件中定义(其他源文件只要包含”.h”文件即可使用全局变量)

 CLU Clu_data[10];  

另外注意若在全局变量定义所在源文件使用static标识符,则该变量只在当前cpp内有效。头文件不会进行编译,当在头文件里使用static标识符时只在包含该头文件的.cpp文件进行编译时使用static定义

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值