Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有c+中参数的Fortran90子例程+; 我试图在C++程序中使用一些FORTRAN 90子程序。我有一个函数writio,没有任何参数可以正常工作,但是我的函数两次都做不到它应该做的事情。这是我的第一个fortran函数,所以问题可能在文件rocker.f90中的某个地方: MODULE rocker CONTAINS SUBROUTINE writio WRITE(*,*) "writings" END SUBROUTINE writio SUBROUTINE twice(number, double) REAL*8, INTENT(IN) :: number REAL*8, INTENT(OUT) :: double WRITE(*,*) 2.0*number double=2.0*number; END SUBROUTINE twice END MODULE rocker PROGRAM runrocker USE rocker, ONLY: writio, twice IMPLICIT NONE REAL*8 :: d1=3.5, d2=0.0 CALL writio() CALL twice(d1, d2) WRITE(*,*) d1, " ", d2 END PROGRAM runrocker_C++_Function_Scope_Fortran - Fatal编程技术网

使用带有c+中参数的Fortran90子例程+; 我试图在C++程序中使用一些FORTRAN 90子程序。我有一个函数writio,没有任何参数可以正常工作,但是我的函数两次都做不到它应该做的事情。这是我的第一个fortran函数,所以问题可能在文件rocker.f90中的某个地方: MODULE rocker CONTAINS SUBROUTINE writio WRITE(*,*) "writings" END SUBROUTINE writio SUBROUTINE twice(number, double) REAL*8, INTENT(IN) :: number REAL*8, INTENT(OUT) :: double WRITE(*,*) 2.0*number double=2.0*number; END SUBROUTINE twice END MODULE rocker PROGRAM runrocker USE rocker, ONLY: writio, twice IMPLICIT NONE REAL*8 :: d1=3.5, d2=0.0 CALL writio() CALL twice(d1, d2) WRITE(*,*) d1, " ", d2 END PROGRAM runrocker

使用带有c+中参数的Fortran90子例程+; 我试图在C++程序中使用一些FORTRAN 90子程序。我有一个函数writio,没有任何参数可以正常工作,但是我的函数两次都做不到它应该做的事情。这是我的第一个fortran函数,所以问题可能在文件rocker.f90中的某个地方: MODULE rocker CONTAINS SUBROUTINE writio WRITE(*,*) "writings" END SUBROUTINE writio SUBROUTINE twice(number, double) REAL*8, INTENT(IN) :: number REAL*8, INTENT(OUT) :: double WRITE(*,*) 2.0*number double=2.0*number; END SUBROUTINE twice END MODULE rocker PROGRAM runrocker USE rocker, ONLY: writio, twice IMPLICIT NONE REAL*8 :: d1=3.5, d2=0.0 CALL writio() CALL twice(d1, d2) WRITE(*,*) d1, " ", d2 END PROGRAM runrocker,c++,function,scope,fortran,C++,Function,Scope,Fortran,我用f95-c rocker.f90编译了这个。然后我想使用C++程序中的子程序 TestCCF.CPP: using namespace std; #include <cstdlib> #include <iostream> #include <iomanip> #include <sstream> #include <fstream> #include <stdio.h> #include <

我用
f95-c rocker.f90
编译了这个。然后我想使用C++程序中的子程序 TestCCF.CPP:

using namespace std;
#include <cstdlib> 
#include <iostream>    
#include <iomanip>  
#include <sstream>
#include <fstream>
#include <stdio.h>    
#include <time.h>
#include <string.h>

extern "C" {
    extern void __rocker_MOD_writio();
    extern void __rocker_MOD_twice(double d1, double d2);
}

int main()  {

    __rocker_MOD_writio();
    double d1=3.5, d2;
    __rocker_MOD_twice(d1, d2);
    cout << d1 << "   " << d2 << endl;

    return 0;
}
然后程序冻结。看来变量可能没有从C++正确地传递到F90?< /P> 编辑:问题似乎不仅仅出现在Fortran代码中,因为我可以从Fortran程序
runrocker.f90
运行它:

MODULE rocker

    CONTAINS

    SUBROUTINE writio
        WRITE(*,*) "writings"
    END SUBROUTINE writio

    SUBROUTINE twice(number, double)
        REAL*8, INTENT(IN) :: number
        REAL*8, INTENT(OUT) :: double
        WRITE(*,*) 2.0*number
        double=2.0*number;
    END SUBROUTINE twice

END MODULE rocker
PROGRAM runrocker
    USE rocker, ONLY: writio, twice
    IMPLICIT NONE 

    REAL*8 :: d1=3.5, d2=0.0    

    CALL writio()
    CALL twice(d1, d2)
    WRITE(*,*) d1, "  ", d2


END PROGRAM runrocker

由于
两次
的第二个参数是
OUT
,因此您可能需要一个参考:

 extern void __rocker_MOD_twice(double d1, double& d2);

谢谢我只是注意到,在我使用的教程中,我也应该仔细阅读。