在两个 .cpp 文件之间定义全局变量

Posted

技术标签:

【中文标题】在两个 .cpp 文件之间定义全局变量【英文标题】:Defining Global Variables Between Two .cpp Files 【发布时间】:2013-08-07 21:08:06 【问题描述】:

如何在 A.cpp 和 B.cpp 之间共享/全局化一个 bool 变量,其中它们都不包含其他的 .h 文件? 他们有其他联合头文件,但彼此没有。我可以在这些共享标头中定义全局变量吗?

谢谢

【问题讨论】:

写问题前请先搜索。如果您在本网站搜索您的标题,您会更容易找到答案。 这暗示了一个糟糕的设计。如果这两个文件如此无关,为什么它们共享一个bool 【参考方案1】:

我可以在这些共享标头中定义全局变量吗?

没有。

在A.cpp(或)B.cpp中写入,

int gVariable = 10;

请记住只在一个源文件中写入上述定义,否则如果您在两个源文件中都写入,链接器会报错。

并且在A.cpp的通用头中,B.cpp写入,

extern int gVariable;

【讨论】:

+1,但尽管您在技术上对“我可以定义...?”说“不”是正确的,但我不确定 OP 是否知道“定义”和“宣布”。答案是“是的,您可以在共享标头中声明变量,然后在其中一个源文件中定义它。” 你是对的。我更多地关注问题中的 define 词。头文件中的extern是声明,虽然可以在各种源文件中多次声明。 谢谢你们。只是一个简短的问题......我可以输入“int gVariable = 10;”吗?在公共头对应的 .cpp 文件中? @user2517676 不,这将导致多个符号。您必须在头文件中进行外部声明,而定义仅在一个源文件/翻译单元中给出。 我的意思是在 C.h 中声明 gVariable,在 C.cpp 中定义它,而 A.cpp 和 B.cpp 都包含 C.h。【参考方案2】:

文件 1:

int x = 50;

文件 2:

extern int x;

【讨论】:

以上是关于在两个 .cpp 文件之间定义全局变量的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中删除其类的实例后,分配给 cpp 中定义的全局静态变量的内存是不是被释放?

在哪里可以在 MFC 应用程序中定义全局变量?

全局变量重复定义,fatal error LNK1169: 找到一个或多个多重定义的符号

一个so库中全局变量未定义引起的问题

C/C++多个源文件访问同一全局变量

matlab global定义全局变量的问题