我有一个static unsigned long gVar;
这是全局在server.cc文件中声明。
但是当我尝试使用extern unsigned long gVar;
其他文件中使用它,它给了错误:无法解析的外部符号“无符号长gVar”
unresolved external symbol "unsigned long gVar"
。你能告诉我如何extern一个静态变量,因为我能够从这个文件中除了这个外部其他变量。
我有一个static unsigned long gVar;
这是全局在server.cc文件中声明。
但是当我尝试使用extern unsigned long gVar;
其他文件中使用它,它给了错误:无法解析的外部符号“无符号长gVar”
unresolved external symbol "unsigned long gVar"
。你能告诉我如何extern一个静态变量,因为我能够从这个文件中除了这个外部其他变量。
您不能一起使用static
和extern
。
如果您想在其他文件中使用该变量,只需删除static
并将其声明为extern
即可。
为什么不能一起使用static
和extern
?
static
意味着内部联动,而extern
意味着外部联动。
内部链接意味着符号只有在它被宣布为翻译单元访问,而外部链接意味着符号应在所有文件可见进行的跨项目,显然,他们是相互排斥的。
那么,在命名空间范围内定义为static T x;
的对象只能在定义文件的本地可见。实际上,这正是使用static
关键字(在名称空间级别)的功能。只要删除static
。
你应该提到静态在不同的上下文中有不同的含义...... – 2012-02-09 06:50:26
@DanO:我的回答只是想解释实际问的Q,即:*为什么static变量不能声明为extern? *我不打算通过添加重要的细节来混淆它,但与Q中的Q无关。 – 2012-02-09 06:58:30
但是他没有区分静态局部静态成员和静态成员,这会在问题和答案中留下一些模糊性。 – 2012-02-11 19:30:03