Я перевожу код 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
функция ничего не печатает за уг. Я не понимаю, почему нет?
2) Я не уверен, что мне даже нужно data
функция. По сути, код Fortran, который я транслирую, использует подпрограмму для присвоения значений переменным в общем блоке. Я пытаюсь сделать что-то подобное, используя структуру, а затем функцию, чтобы заполнить его значениями.
Этот код довольно короткий, и я планирую хранить все в одном файле. Любая помощь очень ценится!
Вы хотите передать ссылку на ваш общий блок:
void data (data_list& val) {
тогда ваши изменения будут общий блок, а не копия.