声明变量在多个文件中访问的最佳方法是什么?

时间:2014-04-11 04:15:54

标签: c++

我有一个全局变量in.h file

extern char Name[10];

我想在另一个文件profile.cpp中初始化这个变量,然后在其他文件中使用a.cpp,b.cpp ..

profile.cpp

char Name[10]="John";

a.cpp

if(id==10)
{
cout<<Name;
}

如何在a.cpp中使用相同的变量及其在profile.cpp中指定的值?是应该将其作为结构进行分析并在多个文件中进行访问?有人能说明如何使用它吗?

6 个答案:

答案 0 :(得分:0)

您的a.cpp应该包含.h文件以及变量声明:

#include "a.h"

// ...
if (id == 10)
    cout << Name;

这几乎是你需要做的事情(至少在你意识到使用全局是一个错误,并且你想彻底改变代码以摆脱它之前)。

答案 1 :(得分:0)

您是否在.h文件中以及在profile.cpp中声明并初始化?它有效吗?

您应该从.h中删除它,因为您在profile.cpp中声明并初始化变量&#39; Name&#39;应该在使用它们的文件中声明为extern;

答案 2 :(得分:0)

如果您的变量必须只读取某些文件,那么最好的方法是使用getter函数,这样就可以确保在任何模块中都不能更改变量的值:

// global header file which declares the global getter function 
#include <string>

std::string Name();

配置文件中的变量声明,static关键字隐藏了您的变量,因此其他文件只能使用getter Name()访问它:

// profile.cpp file

#include <string>

static std::string Name = "John";

文件a.cpp使用名称

#include "global.h"

// ...
if (id == 10)
    cout << Name();

如果您需要更改值,您还可以实现一个setter函数。

答案 3 :(得分:0)

最好的办法是使用单身人士。它是一种通常比全局变量更受欢迎的样式,更重要的是,它允许您摆脱从未定义的全局变量初始化顺序派生的所有问题。

你可以在Andrei Alexandrescu的书“Modern C ++”上阅读很多关于单身人士的文章。您可以使用Loki库(由Alexandrescu本人)实现单例。

答案 4 :(得分:0)

我同意这里的建议,反对使用全局变量,它们可能导致与初始化顺序相关的问题,它们可能会产生线程安全问题,它们会污染命名空间等等。

在c ++中处理全局变量的惯用方法是将它们放在结构中(如你所提到的)或将它们放在命名空间中。您可以阅读有关here的更多信息。 但是,如果你必须使用全局变量(在c ++中你会说global scope处的变量和函数),这是一个简单的例子,代码在你的代码之后:

生成文件

main: main.cpp a.cpp profile.cpp my_globals.h
    g++ -O3 -o main main.cpp a.cpp profile.cpp

clean:
    $(RM) main

my_globals.h

// This is a header file and should only contain declarations
extern char Name[10];         // declaration of Name variable
extern void use_global(int);  // declaration of use_global function

的main.cpp

#include "my_globals.h"
int main(int argc, char * argv[])
{
    use_global(10);           // use of use_global function
    return 0;
}

a.cpp

#include "my_globals.h"
#include <iostream>
using std::cout;
using std::endl;

void use_global(int id) {       // definition of use_global function
    if(id==10)
    {
        cout<<Name<<endl;       // use of Name global variable
    }
}

profile.cpp

#include "my_globals.h"
char Name[10]="John";           // definition of Name variable

你建立它

$ make
g++ -O3 -o main main.cpp a.cpp profile.cpp
$ 

你运行它:

$ ./main
John
$ 

答案 5 :(得分:0)

在包含要使用它的文件中包含包含全局变量的头文件。

为了将来参考,您不能调用变量,除非它已声明或在文件加载的头文件中。