Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-将数据传递给struct_C++_Function_Struct_Fortran_Fortran Common Block - Fatal编程技术网

C++ C++;-将数据传递给struct

C++ C++;-将数据传递给struct,c++,function,struct,fortran,fortran-common-block,C++,Function,Struct,Fortran,Fortran Common Block,我将FORTRAN 77代码翻译成C++,FORTRAN 77使用普通块。我试图用结构替换公共块,然后用函数中的值填充这些结构,然后调用这两个结构以在我的main中使用。目前,我的代码如下所示: #include <iostream> #include <cmath> using namespace std; // data_list struct data_list { double g, dw, Vel, M, dt, N; int Ioutp1

我将FORTRAN 77代码翻译成C++,FORTRAN 77使用普通块。我试图用结构替换公共块,然后用函数中的值填充这些结构,然后调用这两个结构以在我的main中使用。目前,我的代码如下所示:

#include <iostream> 
#include <cmath>
using namespace std;

// data_list 
struct data_list {
    double g, dw, Vel, M, dt, N;
    int Ioutp1, Ioutp2; 
    } values;

void data (data_list& val) {
    val.g = 9.80665;
    val.dw = 0.05; 
    val.Vel = 20.0;
    val.M = 128; 
    val.dt = 0.05; 
    val.N = 4000;
    val.Ioutp1 = 1;
    val.Ioutp2 = 1;
    }   

void Pierson_Moskowitz(data_list& val) {

/*
* Calculation of properties of Pierson_Moskowitz Spectrum
*/
    double Ug, Hs, A, B, Std;
    cout << values.Vel << "\t\t" << values.g; 
    Ug = values.Vel/values.g;
    cout << Ug << endl;

}   
int main() {
  data(values);
  //float dw = values.dw = 0.05;
  cout << values.dw << endl; 

}
#包括
#包括
使用名称空间std;
//数据表
结构数据列表{
双g,dw,Vel,M,dt,N;
intioutp1,Ioutp2;
}价值观;
无效数据(数据列表和val){
val.g=9.80665;
val.dw=0.05;
val.Vel=20.0;
值M=128;
val.dt=0.05;
N值=4000;
val.Ioutp1=1;
val.Ioutp2=1;
}   
void Pierson_Moskowitz(数据列表和val){
/*
*Pierson_-Moskowitz谱特性的计算
*/
双Ug、Hs、A、B、Std;

是否希望传入对公共块的引用:

void data (data_list& val) {

然后,您将看到对公共块的更改,而不是副本。

您希望传入对公共块的引用:

void data (data_list& val) {

你将对普通块而不是复制。

按值传递你的<代码>数据表> /Cord>。没有一个更改是原始代码<代码>值>代码>。C++是按值传递的,所以<代码>数据< /代码>函数有它自己的代码< VLUES 对象。无法访问我的void data函数中给定的值。正确的方法是什么?@user3460758“好的,但我如何修复它?”
void data(data_list&val)<代码> >代码>总是使用标记,只在必要时添加版本来区分您的问题是具体的。例如,您不能使用FORTRAN 2008,但只能使用FORTRAN 90。您正在通过值<代码>数据表> /代码>。没有任何更改会使其变成原始的代码>值< /> >。C++是按值传递的,所以
data
函数有它自己的
vlaues
对象的副本。好的,但是我该如何解决这个问题?我想能够访问我的void data函数中给出的值。正确的方法是什么?@user3460758“好的,但是我该如何解决这个问题?”
void data(data\u list&val)注意<代码> >代码>总是使用标记,只在必要时添加版本来区分你的问题是具体的。例如,你不能使用FORTRAN 2008,但只能使用FORTRAN 90.WOOPS。只写了一个完整的答案,认为它应该是C而不是C++……这个更好。(对编程来说还是很新鲜)--这会在整个代码中将值更改为我在其中输入的任何值吗?这样,如果我在另一个函数或其他地方再次调用该结构,它将始终具有我在数据函数中给它的值?@user3460758它会更改传递给该函数的对象的值。而你不能调用该结构。它不是callable@user3460758是,只需将
extern data\u list value;
放在您想要访问/更改这些值的任何其他编译单元中。如果您不需要更改,请使用
extern const data\u list value;
如果这对您有效,请给出“正确答案”所以如果我在C++中包含<代码> ExtDATA数据列表值<代码>我可以访问数据函数中的单个值吗?我只是想找出我做的是什么或者有什么目的。工作!只是澄清一下(编程还是很新的)--这会在整个代码中将值更改为我在其中输入的任何值吗?这样,如果我在另一个函数或其他地方再次调用该结构,它将始终具有我在数据函数中给它的值?@user3460758它会更改传递给该函数的对象的值。而你不能调用该结构。它不是callable@user3460758是,只需将
extern data\u list value;
放在您想要访问/更改这些值的任何其他编译单元中。如果您不需要更改,请使用
extern const data\u list value;
如果这对您有效,请给出“正确答案”因此,如果我在main中包含
extern data\u list value
,我就可以访问数据函数中的各个值了?我只是想弄清楚我这样做的目的是什么,或者是否有任何目的。