静态变量具有文件范围。假设我有以下两个文件:
- 文件1.h
- 文件1.cpp
- 文件2.h
- 文件2.cpp
我在两个头文件中都声明了静态变量 static int Var1
。 file1.h
和 file2.h
都包含在 main.cpp
文件中。
我这样做是因为静态变量将具有文件范围,因此不会相互冲突。但编译后我发现它显示冲突。
现在静态变量的行为类似于 extern
变量。另一方面,如果我在两个 .cpp 文件中声明静态变量,它编译得很好。
我无法理解这种行为。
任何机构都可以解释范围和链接在这种情况下是如何工作的。
原文由 Vikram Ranabhatt 发布,翻译遵循 CC BY-SA 4.0 许可协议
静态变量是编译单元的本地变量。 编译单元 基本上是一个
.cpp
文件,其中插入了.h
文件的内容来代替每个#include
指令。现在,在一个编译单元中,你不能有两个同名的全局变量。 This is what’s happening in your case:
main.cpp
includesfile1.h
andfile.h
, and each of the two headers defines its ownVar1
.如果在逻辑上它们是两个不同的变量,请给它们不同的名称(或将它们放在不同的名称空间中)。
如果这些是相同的变量,请将其移至单独的头文件
var1.h
中,并包括var1.h
来自file1.h
和file2.h
不要忘记var1.h
中的 #include 保护。