方式:全局变量实现跨类调用(extern)

环境:MFC

目的:两个Dialog(Class),A和B,想在B中调用 A中的变量(IplImage * img)

实现:在A.cpp 添加代码如下

CADlg * pADlg = new CADlg;

在A.cpp的构造函数(和类名同名的函数)中添加代码如下

pADlg = this;

这样就有一个全局指针变量pADlg指向了实例对象

调用:在B.cpp添加代码如下

extern CADlg *pADlg;

1基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。

也就是说extern有两个作用,(本段取自其他地方,仅供大家方便理解)

第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释!
    第二,当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。

C++跨类调用——extern相关推荐

  1. java 跨类 调用 model_Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。...

    @JFinal 你好,想跟你请教个问题: Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊. /** * Find model. */ @SuppressWarnings ...

  2. Java变量与方法的调用:同类操作中与跨类操作中的对比

    变量与方法的调用 很多同志对Java中同一类和跨类的变量与方法调用不甚理解.今天让我们通过代码实例学习一下. 先上结论 在一个类中操作时 静态方法可以直接调用静态变量.静态方法. 初始化对象Objec ...

  3. 关于PrintQueueCollection()类,跨线程调用错误“线程无法访问此对象,因为另一个线程拥有该对象”

    使用System.Printing.PrintQueueCollection()   纸质打印机获取 _generalPrinters = new PrintQueueCollection(); pu ...

  4. Qt:解决跨线程调用socket/IO类,导致报错的问题(socket notifiers cannot be enabled from another thread)

    Qt有很多IO相关的类,比如说QTcpSocket.QFile,总的来说,在Qt的框架内使用,还是非常方便的. 但是用过其他框架IO类的人,可能有一个很不习惯,就是Qt的所有IO类,都不推荐或者不可以 ...

  5. c语言程序中变量先引用声明,C语言如何跨文件调用函数定义中声明的变量

    变量的作用域 我们知道,变量根据其作用域有全局变量和局部变量之分.全局变量作用域是整个文件,并且可以使用关键字 extern 达到跨文件调用的目的.但是局部变量值作用于它当前所在的块(即该变量所处最内 ...

  6. c#中如何跨线程调用windows窗体控件?

    我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...

  7. WCF 4.0 REST Service JSON跨域调用

    最近在项目中用到了 WCF4.0 REST.在跨域调用时走了不少弯路,查了不少技术强人的文章,其实它真的就这么容易.好了不废话了直接贴代码. 调用的服务类:  1     [ServiceContra ...

  8. 使用thrift进行跨语言调用(php c# java)

    1:前言 实际上本文说的是跨进程的异构语言调用,举个简单的例子就是利用PHP写的代码去调C#或是java写的服务端.其实除了本文提供的办法还有其他办法,例如http+xml(json)等等都能做到. ...

  9. thinkphp如何跨模块调用方法呢?

    在thinkphp里面我们如何跨模块调用(这里使用Action举例:如果项目需要的话,还有可能跨分组调用,所以有时候需要调用其他组的Action). 我在开发的过程中经常会在当前Action中调用其他 ...

最新文章

  1. centos下搭建nginx+tomcat实现集群负载与session复制
  2. 【python记录】使用ip摄像头 vlc打开rtsp服务 python远程调用摄像头记录过程
  3. 走近分形与混沌(part1)--分形是趋于无穷的极限,是画不出来的
  4. 这是一个沙雕题II(思维好题)
  5. 论文浅尝 | 面向简单知识库问答的模式修正强化策略
  6. 在.Net 4.0下用dynamic为你的系统解耦
  7. 苹果降价潮一波接一波 两款廉价iPad“箭在弦上”
  8. py2neo database
  9. MOOC网站日志分析
  10. android 学习十四 探索安全性和权限
  11. 优化算法——粒子群算法(PSO)
  12. GitHub客户端的使用方法
  13. 已知棱长求三棱锥的表面积和体积
  14. 构建 GPRS 网络(转)
  15. OpenCV开发笔记(六十三):红胖子8分钟带你深入了解SIFT特征点(图文并茂+浅显易懂+程序源码)
  16. iOS 开发之使用苹果测试工具 TestFlight (进行内部和外部测试)
  17. CTFlearn-Modern Gaius Julius Caesar
  18. 压缩包打开密码解决办法
  19. 太极链,区块链中的一种及其技术奥义
  20. 牛客网——华为题库(41~50)

热门文章

  1. 十图详解TensorFlow数据读取机制(附代码)
  2. 解构电商产品——订单系统(一)
  3. 基于注解的Spring AOP的配置和使用--转载
  4. weblogic cluster error-----Could not= open connection with host: 127.0.0.1
  5. 金融风控实战——模型融合
  6. 元宇宙iwemeta: 苹果Apple推动元宇宙产业的生态体系
  7. 独家专访:SequoiaDB 3.0 版本正式发布!协议级完整兼容MySQL!
  8. 为什么都要鄙视 PHP 程序员? Java联盟 百家号 07-24 21:43 前几天发表了一篇文章《图解:程序员之间是如何相互鄙视的?》,有人就在留言处留言。 可以解释下:为什么都鄙视PHP工程师
  9. 植入“电商基因” 传统产业搭上网络快车[图]
  10. vs linux 交叉编译,VS结合VisualGDB搭建OpenWrt交叉编译远程调试开发环境