我正在编写一个小型的C++程序,它将一个二维数组(复数)传递给一个Fortran子程序,然后将它接收回来填充值.我写了一个通过并接收一维数组的版本,这很有效.2-D版本不起作用(我的真正目标是编写具有大尺寸的4-D版本 - 因此必须动态分配这些数组).
我将发布我的工作代码和非工作代码,但首先请注意我被迫使用结构(简单的,只包含两个双精度),因为Fortran似乎以与其自身的原始复数完全相同的方式解释它们.这就是我的1-D版本有效的原因.出于同样的原因,我不认为这是一个"复杂数字"的问题.
这是我的工作代码.将一维复数数组传递给Fortran子程序:
Fortran子程序:
subroutine carray(A)
complex*16 A(2)
A(1) = cmplx(3,7)
A(2) = cmplx(9,5)
return
end
Run Code Online (Sandbox Code Playgroud)
C++代码:
include <iostream>
include <complex>
using namespace std;
struct cpx{double r, i;};
extern"C"
{
void carray_(struct cpx* A);
}
int main()
{
struct cpx* A;
A = new struct cpx [2];
carray_(A);
complex<double>* P;
P = new complex<double> [2];
for(x = 0; x < 2; x++)
{
real(P[x] = A[x].r;
imag(P[x] = A[x].i;
}
cout << real(P[0]) << "\t" << imag(P[0]) << …
Run Code Online (Sandbox Code Playgroud)