2014-09-16 3 views
0

저는 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 코드는 서브 루틴을 사용하여 공통 블록의 변수에 값을 할당합니다. 구조체와 함수를 사용하여 값을 채우기 위해 비슷한 것을하려고합니다.

이 코드는 매우 짧으며 모든 것을 하나의 파일로 유지할 계획입니다. 어떤 도움이라도 정말 고맙습니다 !!

+0

'data_list'를 값으로 전달하고 있습니다. 변경 사항 중 아무 것도 원래의 '값'으로 변경하지 않습니다. – dlf

+0

C++는 값으로 전달되므로'data' 함수는'vlaues' 객체의 자체 복사본을 가지고 있습니다. – juanchopanza

+0

하지만 어떻게 해결할 수 있습니까? 내 무효 데이터 함수에서 주어진 값에 액세스 할 수 있기를 원합니다.이 작업을 수행하는 올바른 방법은 무엇입니까? – user3460758

답변

4

당신은 당신의 일반적인 블록에 대한 참조를 전달하려는 :

void data (data_list& val) { 

다음 당신이있는 거 변화가 일반적인 블록이 아닌 사본 될 것입니다.

+0

와우. C++ 대신에 C가되어야한다고 생각하는 전체 답을 썼습니다 ...이게 더 낫습니다! – Serge

+0

좋습니다. 그래도 (여전히 프로그래밍에 익숙하지 않다) 명확히하기 위해 - 이것은 전체 코드에서 내가 거기에 넣은 값을 바꿀 것인가? 그래서 구조체를 다른 함수 나 다른 곳에서 다시 호출하면 데이터 값 함수에 값을 부여 할 수 있습니까? – user3460758

+0

@ user3460758 함수에 전달한 객체의 값이 변경됩니다. 그리고 여러분은이 구조체를 호출 할 수 없습니다. 호출 할 수 없습니다. – juanchopanza

관련 문제