C++ 多个文件中的全局变量

C++ 多个文件中的全局变量,c++,C++,我有两个需要访问公共变量的源文件。最好的方法是什么?e、 g: 资料来源1.cpp: int global; int function(); int main() { global=42; function(); return 0; } 资料来源2.cpp: int function() { if(global==42) return 42; return 0; } 全局变量的声明应该是静态的、外部的,还是在两个文件所包含的头文件中

我有两个需要访问公共变量的源文件。最好的方法是什么?e、 g:

资料来源1.cpp:

int global;

int function();

int main()
{
    global=42;
    function();
    return 0;
}
资料来源2.cpp:

int function()
{
    if(global==42)
        return 42;
    return 0;
}

全局变量的声明应该是静态的、外部的,还是在两个文件所包含的头文件中,等等?

在一个文件中声明为source1.cpp,在第二个文件中声明为

extern int global;

当然,您确实不想这样做,可能应该发布一个关于您试图实现什么的问题,以便这里的人可以为您提供其他实现方法。

全局变量应该在两个源文件包含的头文件中声明,然后仅在其中一个源文件中定义:

common.h

source1.cpp

source2.cpp

您添加了一个“头文件”,该文件描述了模块source1.cpp的接口:

int global;

int function();

int main()
{
    global=42;
    function();
    return 0;
}
资料来源1.h

#ifndef SOURCE1_H_
#define SOURCE1_H_

extern int global;

#endif
资料来源2.h

#ifndef SOURCE2_H_
#define SOURCE2_H_

int function();

#endif
并在每个文件中添加一个使用此变量的#include语句,以及(重要的)定义该变量的语句

source1.cpp

#include "source1.h"
#include "source2.h"

int global;     

int main()     
{     
    global=42;     
    function();     
    return 0;     
}
source2.cpp

#include "source1.h"
#include "source2.h"

int function()            
{            
    if(global==42)            
        return 42;            
    return 0;            
}

虽然没有必要,但我建议文件名为source1.h,以表明它描述了模块source1.cpp的公共接口。同样,source2.h描述了source2.cpp中公开的内容。

可能的重复。请重新编写代码以使用全局变量以外的其他变量,或者将问题重新标记为“C”。当我需要C++中的全局时,我通常会通过访问器方法使它成为一个可以公开读取的类的静态成员。如果可以缩小范围,只让内部类成员使用访问器,那就更好了。很少有变量是真正的“全局变量”。这取决于您想做什么
function()
对于这两个源也是通用的,并且需要相同的处理。对于
global
而言,“最好的方法”是根本不要这样做。您应该实现编译器为每个需要声明的编译单元获得相同的外部声明。当您将外部程序分布到所有需要外部程序访问变量、函数、。。。很难使它们保持同步。这就是为什么:不要在consuming.cpp文件中声明extern。如果您想了解更多信息和解释:使用QString如何,我使用
extern QString ciclo\u actual
对于全局变量,我可以在任何文件上定义它,但编译器总是trow
QString不命名类型
#include "source1.h"
#include "source2.h"

int global;     

int main()     
{     
    global=42;     
    function();     
    return 0;     
}
#include "source1.h"
#include "source2.h"

int function()            
{            
    if(global==42)            
        return 42;            
    return 0;            
}