不同源文件有同名的全局变量,但是变量类型不同,会造成“严重”问题!

A.cpp文件有全局变量cv::Rect2f box;

B.cpp文件有全局变量cv::Rect box;

在B文件中会对box变量赋值,此后,如果在A文件中打印box,会出现box的值变为伪数据,类似3.44322e-43。

如果B中的全局变量类型与A中的一致,都是cv::Rect2f,则在A中打印box的值,就会与B中修改的值是一样的。

疑问1:为什么编译器不报错?

如果在同一个.cpp文件里:

全局变量,同时声明,或者局部变量,同时声明

float a;

int a;

编译不过去,报变量名冲突!

如果一个是全局变量,一个是局部变量,编译通过,并且打印的时候会打印局部变量的值。

所以,如果编译器认为它俩是同一个变量,那类型不同,编译的时候就应该报错;既然没有报错,就是编译器认为这是两个不同的变量,那既然是不同的变量,就应该根据赋值类型来区分是对哪个变量再修改值。我在B文件中,给box赋的是整型值,但是为什么A文件中的浮点型变量也跟着变了呢?不懂中。。。。有时间再解决!

疑问2:伪数据到底时是乱码还是因为类型转换时,第一个字节是1,造成的负值?

估计是乱码!

总结:不管什么原因,一定要注意,在每个源文件里的全局变量,最好都加上static,限制变量的作用范围。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值