0

Fortran 77 コードを C++ に変換していますが、Fortran 77 は共通ブロックを使用しています。共通ブロックを構造体に置き換えようとしています。構造体に関数からの値を入力し、メインで使用するために両方を呼び出します。現時点では、私のコードは次のようになります。

#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関数で値が与えられた変数をコード全体で使用できるようにすることです。現時点で迷っているのは以下の2点です。

1) 私のPierson-Moskowitz関数は Ug に対して何も出力しません。なぜだかわかりませんか?2)その機能が必要かどうかさえわかりませんdata。基本的に、私が翻訳している Fortran コードはサブルーチンを使用して、共通ブロック内の変数に値を割り当てます。構造体と関数を使用して値を入力することで、同様のことをしようとしています。

このコードは非常に短いので、すべてを 1 つのファイルにまとめる予定です。どんな助けでも本当に感謝しています!!

4

1 に答える 1

4

共通ブロックへの参照を渡したい:

void data (data_list& val) {

その場合、変更はコピーではなく共通ブロックになります

于 2014-09-16T15:27:06.407 に答える