C++ 变量必须在所有源中都是绝对全局的

C++ 变量必须在所有源中都是绝对全局的,c++,gcc,module,linker-errors,C++,Gcc,Module,Linker Errors,我们如何使一个变量在一个(将是)二进制文件的所有.cpp文件/模块中成为全局变量,该二进制文件将由g++以一行的形式编译和链接 即使它是在main中定义的,并且在var.中有extern包含在每个.cpp中 extern int a_sample_var; 尝试了一个多星期,结果失败了 ..:未定义对a\u sample\u var的引用 有慷慨的大师帮我吗?extern int a\u sample\u var; 告诉编译器:有一个名为a\u simple\u var的int定义在其他地方

我们如何使一个变量在一个(将是)二进制文件的所有.cpp文件/模块中成为全局变量,该二进制文件将由g++以一行的形式编译和链接

即使它是在main中定义的,并且在var.中有extern包含在每个.cpp中

extern int a_sample_var;
尝试了一个多星期,结果失败了

..:未定义对
a\u sample\u var的引用

有慷慨的大师帮我吗?

extern int a\u sample\u var;
告诉编译器:有一个名为
a\u simple\u var
int
定义在其他地方(想想关键字
extern
:它是
external
的缩写,意思是“其他地方”)。只需在那里留下一个占位符,等待链接器找到它

如果你在每个
cpp
文件中都这样做(通过包含一个头),那么每个人都在要求定义(通过提供声明),但是没有人提供定义注意这里的措辞,定义和声明是不同的

在一个
cpp
文件中,您应提供
a_simple_var
的定义。只需删除
extern

int a_sample_var;//用0初始化

int a_sample_var=1;//用1初始化。

这两个是正确的定义。

Global是个坏主意。虽然可以将其引入到使用的名称空间中,但仍然无法将其添加到头文件中并将其包含在所有源文件中。根据我的经验,人们抱怨没有显式地编写
…=0
,这就是为什么我建议
int a_sample_var=0取而代之。但在一个更开放的环境中,两者都可以。