我有一个全局变量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中指定的值?是应该将其作为结构进行分析并在多个文件中进行访问?有人能说明如何使用它吗?
答案 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)
在包含要使用它的文件中包含包含全局变量的头文件。
为了将来参考,您不能调用变量,除非它已声明或在文件加载的头文件中。