저는 Fortran 77 코드를 C++로 변환하고 Fortran 77은 공통 블록을 사용합니다. 공용 블록을 구조체로 대체하려고합니다.이 구조체는 함수의 값으로 채우고 둘 다 내 주체에서 사용하도록 호출합니다. 그 순간 내 코드는 다음과 같이 보입니다 :C++ - 데이터를 구조체에 전달
#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 코드는 서브 루틴을 사용하여 공통 블록의 변수에 값을 할당합니다. 구조체와 함수를 사용하여 값을 채우기 위해 비슷한 것을하려고합니다.
이 코드는 매우 짧으며 모든 것을 하나의 파일로 유지할 계획입니다. 어떤 도움이라도 정말 고맙습니다 !!
'data_list'를 값으로 전달하고 있습니다. 변경 사항 중 아무 것도 원래의 '값'으로 변경하지 않습니다. – dlf
C++는 값으로 전달되므로'data' 함수는'vlaues' 객체의 자체 복사본을 가지고 있습니다. – juanchopanza
하지만 어떻게 해결할 수 있습니까? 내 무효 데이터 함수에서 주어진 값에 액세스 할 수 있기를 원합니다.이 작업을 수행하는 올바른 방법은 무엇입니까? – user3460758