c++中static和extern的同与不同,解决一个小bug后的总结

今天遇到一个这样的bug,花了半小时才解决,就是新版的相机代码把获取相机图像的代码都独立于交互界面这个类之外了,然后设置为全局变量调用,老师给的一份代码是:

extern GX_DEV_HANDLE hDevice;//设备号
static SystemWindow* form = nullptr;//

然后在devc++上运行正常,然后在vs上我按这个做的时候其他的都正常,就是无法显示相机图像,经过一步步的打断点调试,我发现是因为paintEvent(QPaintEvent* event)函数在判断if (image.isNull()) return;就返回了,说明image是空的,再经过排查,我发现是这里form是空的,所以image没有赋值

if (form)
  {
   form->setImage(image.copy());
   form->update();
   //cout<<"setImage and update!"<<endl;   
  }

但main函数里form是有值的,然后我给form加了一个监听,发现在main.cpp文件是正常的,在systemwindow.cpp中form变为空了,这是为什么呢?我首先再次查看static声明变量时的用法,发现其中有一句是static只在本文件起作用,老师的代码正确原因是他在devc++上直接用一个文件把所有代码都包含了,而我在vs上.h,.cpp文件是分开的,所以出现问题,最后我将声明变为extern GX_DEV_HANDLE hDevice;//设备号
extern SystemWindow* form;正常出现图像
在这里插入图片描述
顺便总结一下extern和static的区别和联系:
都有一种更改作用域和生命周期的能力,extern是简单的一个标志,就是标志着这个变量是全局变量,其他文件其他地方也能访问,而static是定义静态变量,只能在当前文件被使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值