首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

最后60分问一个static的有关问题

2012-03-29 
最后60分问一个static的问题sdt.h这个头文件定义了static std::vectorstudent svec 这个static变量main

最后60分问一个static的问题
sdt.h这个头文件定义了static std::vector<student> svec; 这个static变量
main.cpp,index.cpp,weihu.cpp都包含了sdt.h这个头文件的.
可为什么只有在main.cpp能使用svec这个变量,index.cpp,weihu.cpp里使用svec都没有任何效果啊?但是没有抱任何错误!!


我发现这个就是导致这2个问题的原因:
http://topic.csdn.net/u/20080601/20/9faf068d-7d4a-4a64-869d-2e83ff521f45.html
http://topic.csdn.net/u/20080601/22/8ac754b7-70c3-427b-8031-3c69adfe160a.html


[解决办法]
只要在你的头文件sdt.h中简单修改下
svec的定义与声明就可以了

问题是static变量在编译连接的时候具有内部连接属性

这区别于extern(外部连接属性)

因此你只在头文件static std::vector <student> svec

如果其他头文件也包含了这个头文件,实际上是生成了多个svec,这几个svec在各个.cpp模块内互相不可见

也就是都是属于模块内部变量,并不是全局可见,在连接的时候并不会由全局的符号表来找到你想通用的一个,相反各个模块都有个svec的符号表

如果你要维护一个全局变量,那就不要使用static,可以使用全局变量,在其他模块引用时,加上extern,也就是声明定义在一处,引用可以在多处

热点排行