您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-01 16:24 274 查看

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定义

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐