常德住房和城乡建设局网站,建立网站第一步怎么做,wordpress 登陆访问,软件开发用的软件文章目录1 方法2 外部变量 应用2.1 普通外部全局变量2.2 枚举外部全局变量 应用2.2.2 枚举外部变量优化c多个文件中如何共用一个全局变量
c头文件的使用和多个文件中如何共用一个全局变量
C共享枚举类型给QML
1 方法
①头文件中 声明外部全局变量#xff1b; ②在头文件对…
文章目录1 方法2 外部变量 应用2.1 普通外部全局变量2.2 枚举外部全局变量 应用2.2.2 枚举外部变量优化c多个文件中如何共用一个全局变量
c头文件的使用和多个文件中如何共用一个全局变量
C共享枚举类型给QML
1 方法
①头文件中 声明外部全局变量 ②在头文件对应的.cpp文件中定义该全局变量 ③在要使用该外部变量的.cpp文件中引用声明外部全局变量的.h文件
明确几个点 1不管变量还是函数先声明 或者直接定义才能使用声明能声明n次同一个作用域里面 定义只能定义一次 2 根据C标准的规定一个变量声明必须同时满足两个条件否则就是定义 (1)声明必须使用extern关键字(2)不能给变量赋初值 extern int a; //声明 int a; //定义int a 0; //定义extern int a 0; //定义3一个全局变量的作用域默认是整个程序 加了static 或者加了 const 则是这个源文件 4如果在多个源文件 包含同一个名字的 全局变量的 定义就会引起重定义
2 外部变量 应用
2.1 普通外部全局变量
1头文件中 声明外部全局变量
头文件AutoROI.h
//多文件全局变量
extern cv::Mat g_Img_SelectRegion; //选择图像区域如B2,B3
extern cv::Mat g_Img_BorderROI; //H、V边界ROI
extern cv::Mat g_Img_VertexROI; //屏幕四个顶点左上、右上、左下、右下十字刻度尺ROI//ROI-B2全局变量边线定位需要
extern int ROI_B2_X,ROI_B2_Y;
extern int ROI_Vexter_X ,ROI_Vexter_Y;//右上顶点
//ROI-H
extern int ROI_H_X,ROI_H_Y ;
//ROI-V
extern int ROI_V_X,ROI_V_Y ;2在.cpp中定义该全局变量
源文件AutoROI.cpp
//多文件全局变量
cv::Mat g_Img_SelectRegion; //选择图像区域如B2,B3
cv::Mat g_Img_BorderROI; //H、V边界ROI
cv::Mat g_Img_VertexROI; //屏幕四个顶点左上、右上、左下、右下十字刻度尺ROI//ROI-B2全局变量边线定位需要
int ROI_B2_X,ROI_B2_Y;
int ROI_Vexter_X, ROI_Vexter_Y;//右上
//ROI-H
int ROI_H_X, ROI_H_Y;
//ROI-V
int ROI_V_X, ROI_V_Y;3在任意要使用该外部变量的.cpp文件中引用声明外部全局变量的.h文件
#include AutoROI.h2.2 枚举外部全局变量 应用
1在头文件中 声明枚举类型
头文件AutoROI.h
//枚举类型声明
extern enum Cameras {cam1, cam2, cam3, cam4, cam5
};
extern enum ImgRegion {//选择区域B6, B4, B2, F6, F2,
};2在头文件中 声明枚举变量
头文件AutoROI.h
//枚举变量声明
extern enum Cameras camera;
extern enum ImgRegion imgRegion;3在.cpp中定义该全局变量
源文件AutoROI.cpp
//枚举定义变量
enum Cameras camera;
enum ImgRegion imgRegion;4在任意要使用该外部变量的.cpp文件中引用声明外部全局变量的.h文件
#include AutoROI.h2.2.2 枚举外部变量优化
按照上面的步骤运行后
警告 C4091 “extern ”: 没有声明变量时忽略“Cameras”的左侧 原因 在头文件中 声明枚举类型时加了extern因为此时只是声明 枚举的类型并没有声明枚举的变量所以不需要 extern关键字 于是 枚举类型声明 前的 extern警告消失
总结在使用枚举外部变量时 枚举类型声明无需加 extern关键字 只有在声明枚举变量时才加extern关键字
记住 不管是什么类型的外部变量都只在变量前加extern关键字至于变量类型啥的一律不加extern