C ++ - 将数据传递给struct

时间:2014-09-16 15:23:44

标签: 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, 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; 

}

这只是一个测试,因为我的主要人员除了打印一个值之外什么也没做。我想要的是我的data函数中给定值的变量能够在整个代码中使用。目前,有两件事我很困惑:

1)我的Pierson-Moskowitz函数没有为Ug打印任何内容。我不明白为什么不呢? 2)我不确定我是否需要data功能。基本上我正在翻译的Fortran代码使用子例程将值赋给公共块中的变量。我试图通过使用结构然后使用函数来填充值来做类似的事情。

此代码很短,我打算将所有内容保存在一个文件中。任何帮助都非常感谢!!

1 个答案:

答案 0 :(得分:4)

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

void data (data_list& val) {

然后您将更改 公共区块而不是副本。