C++ - 将数据传递给结构

标签 c++ function struct fortran fortran-common-block

我正在将 Fortran 77 代码转换为 C++,而 Fortran 77 使用公共(public) block 。我正在尝试用结构替换公共(public) block ,然后我将用函数中的值填充这些结构,然后调用它们以在我的 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; 

}

这只是一个测试,因为目前我的 main 除了打印一个值之外没有做任何事情。我想要的是在我的 data 函数中给定值的变量能够在整个代码中使用。目前,我对两件事感到困惑:

1) 我的 Pierson-Moskowitz 函数没有为 Ug 打印任何内容。我不明白为什么不呢? 2) 我不确定我什至需要 data 函数。本质上,我正在翻译的 Fortran 代码使用子例程为公共(public) block 中的变量赋值。我正在尝试通过使用一个结构然后使用一个函数来用值填充它来做类似的事情。

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

最佳答案

您想传递对公共(public) block 的引用:

void data (data_list& val) {

然后您将更改公共(public) block 而不是拷贝。

关于C++ - 将数据传递给结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25872688/

相关文章:

c - 改进了在结构指针内为结构双指针动态分配内存的方法

使用 C 中的结构和指针更改图像大小/分辨率

c++ - 对同一数据使用两个不同的结构

c++ - 视频对象链表插入函数

c++ - struct pcap_pkthdr len 总是 == 零

Python:从函数中减去一个 float (为了调用 scipy.newton())

java - 如何在 Java 中制作动态方法的 hashmap

c++ - 在 C++ 中使用换行符打破循环

javascript - 如何在javascript中将值作为参数传递

c++ - 从派生结构初始化 const 父结构成员