c++ - 变量在所有来源中必须是绝对全局的

标签 c++ gcc module linker-errors

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

即使它已经在 main 中定义并且在 var 中有 extern。包含在每个 .cpp 中

extern int a_sample_var;

尝试了一个多星期才失败,

.....: undefined reference to a_sample_var .....

有没有慷慨的大师帮助我?

最佳答案

extern int a_sample_var;

告诉编译器:在别处定义了一个名为 a_simple_varint(想想关键字 extern:它是 的缩写external,意思是“其他地方”)。只需在那里留下一个占位符,等待链接器找到它!

好吧,如果您在每个 cpp 文件中都这样做(通过包含 header ),那么每个人都在急切地想要定义(通过提供声明),但没有人提供定义。 注意这里的措辞,定义和声明是不同的东西

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

int a_sample_var;          // Initialize with 0

int a_sample_var = 1;      // Initialize with 1.

这两个是正确的定义。

关于c++ - 变量在所有来源中必须是绝对全局的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58388465/

相关文章:

c++ - C++中作为类成员的分布

c++ - "const"、 "&"和 "&&"如何影响无参数函数的重载?

linux - 在 Alpine 上从源代码安装 GCC

c++ - 在 GCC 中链接库

php - 将模块添加到 bonfire 中的新上下文中

javascript - Nodejs 模块导出 TypeError

c++ - 如何在 dll 中创建一个 shared_ptr 并通过工厂函数导出它?

git - 如何使用 Homebrew 软件安装 imagemagick?

python - 如何从兄弟目录导入python模块?

c++ - 我无法读取空格并使用 devc++ 在 c++ 中输入