我是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;
非常感谢任何帮助。希望这篇文章不会太长。
答案 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