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,限制变量的作用范围。