2012-02-09 129 views
0

我有一个static unsigned long gVar;这是全局在server.cc文件中声明。
但是当我尝试使用extern unsigned long gVar;其他文件中使用它,它给了错误:无法解析的外部符号“无符号长gVar”

unresolved external symbol "unsigned long gVar"。你能告诉我如何extern一个静态变量,因为我能够从这个文件中除了这个外部其他变量。

回答

4

您不能一起使用staticextern
如果您想在其他文件中使用该变量,只需删除static并将其声明为extern即可。

为什么不能一起使用staticextern

static意味着内部联动,而extern意味着外部联动。

内部链接意味着符号只有在它被宣布为翻译单元访问,而外部链接意味着符号应在所有文件可见进行的跨项目,显然,他们是相互排斥的。

+0

你应该提到静态在不同的上下文中有不同的含义...... – 2012-02-09 06:50:26

+1

@DanO:我的回答只是想解释实际问的Q,即:*为什么static变量不能声明为extern? *我不打算通过添加重要的细节来混淆它,但与Q中的Q无关。 – 2012-02-09 06:58:30

+0

但是他没有区分静态局部静态成员和静态成员,这会在问题和答案中留下一些模糊性。 – 2012-02-11 19:30:03

1

那么,在命名空间范围内定义为static T x;的对象只能在定义文件的本地可见。实际上,这正是使用static关键字(在名称空间级别)的功能。只要删除static