全局变量在主C ++中没有变化

时间:2015-01-05 15:32:39

标签: c++ variables global

我是C ++的新手,我正在通过尝试编写一个模拟粒子的蒙特卡罗代码来学习它,这些代码通过LJ潜力进行交互(对于那些不知道那是什么的人,我正在写一个科学的程序模拟粒子。)

许多不同的函数和模块使用相同的变量,因此利用全局变量对我来说非常有用。但是我很难找到足够详细的教程或问题。无论是那个还是我在做一些简单的错误。

要了解如何使用全局变量,我已经开始使用主程序,一个读取文本文件的函数,以及一个用于变量的全局文件。在main中,我调用了读取变量的函数(链接到全局文件),但是在主程序中没有更改变量。输入文件将T设为10。

以下代码返回:

Read_control表示T = 10

LJ说T = 5

lennardjones.cc

#include <iostream> 
#ifndef GLOBAL
#define GLOBAL
#include "global.hh"
#endif
#include "read_control.hh"

using namespace std;

int main() {

double T=5;

read_control();

cout << "LJ says T = " << T << endl;

return 0; }

read_control.hh

#include <fstream>
#include <iostream>
#include <string>
#ifndef GLOBAL
#define GLOBAL
#include "global.hh"
#endif

using namespace std;

void read_control() {

double P, T;

ifstream file;
string u = "useless data";

file.open("control.inp");

file>> u >> u >> P >> T;

file.close();

cout << "Read_control says T = " << T << endl;
}

global.hh

#ifndef GLOBAL
#define GLOBAL
#endif

extern double P, T;

非常感谢任何帮助。希望这篇文章不会太长。

2 个答案:

答案 0 :(得分:0)

您只使用本地变量。

创建一个标题(或重命名你的&#34; global.hh&#34;)&#34; lennardjones.hpp&#34;并使用 extern double T; 声明全局变量T(可怕名称)并在主函数外定义(并初始化)变量 double T = 5; / strong>在源文件&#34; lennardjones.cc&#34;

现在在两个源文件中包含标题lennardjones.hpp,其中包含 #include&#34; lennardjones.hpp&#34; 。从函数read_control()和main()中删除变量T的定义。

此外:
把你的包含守卫放在标题中(为标题做一次工作就是标题的目的)如果你不需要它们就停止使用全局变量。我很确定你不需要全局变量。我只能建议你阅读一本关于C ++的好书,目前的代码看起来像混合知识从平庸到半个完整的网络教程。

答案 1 :(得分:0)

void read_control() {

double P, T;

ifstream file;
string u = "useless data";

file.open("control.inp");

file>> u >> u >> P >> T;

file.close();

cout << "Read_control says T = " << T << endl;
}

此处声明的变量T是此函数的局部变量,其范围以函数结尾,是全局变量。

这是你如何做的

#include <iostream> 
#ifndef GLOBAL
#define GLOBAL
#include "global.hh"
#endif
#include "read_control.hh"

using namespace std;
int T = 100 // T is now a Global variable

int main() {

double T=5;  // T is also a Local variable for the function main()

read_control();
cout<<T; // will print 5 as it is what the Local var T is
cout<<::T ; // will print 100 , i.e the value of Global variable

cout << "LJ says T = " << T << endl;

return 0; }

注意如果您使用T的此类声明,则T是main()的全局变量以及之后定义的所有函数,但不是read_control()功能,如前所述。要做到这一点,只需在我们的全球声明之后加入它

#include <iostream> 
#ifndef GLOBAL
#define GLOBAL
#include "global.hh"
#endif

using namespace std;
int T = 100 // T is now a Global variable
#include "read_control.hh"
int main() {

double T=5;  // T is also a Local variable for the function main()

read_control();
cout<<T; // will print 5 as it is what the Local var T is
cout<<::T ; // will print 100 , i.e the value of Global variable

cout << "LJ says T = " << T << endl;

return 0; }

::是c ++中的范围解析运算符。你在这里阅读:http://www.serc.iisc.ernet.in/facilities/ComputingFacilities/systems/cluster/vac-7.0/html/language/ref/clrc05cplr175.htm