Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Fortran 错误(1147):此模块已定义_Fortran - Fatal编程技术网

Fortran 错误(1147):此模块已定义

Fortran 错误(1147):此模块已定义,fortran,Fortran,我编写的代码使用了另一个代码中的模块(我没有编写它)。当我将这个模块与主程序一起使用时,它运行良好,没有显示错误。当我将此模块与子例程一起使用时,它显示: 此模块已定义 试图正确地总结代码。 以下是可复制代码: subroutine polygoneclipping(n,vtable0,vcoord0,BOUNDARYPOINTS0,NEWvcoord0,Unumber) use SutherlandHodgmanUtil only : polygon,sutherlandHodgman,e

我编写的代码使用了另一个代码中的模块(我没有编写它)。当我将这个模块与主程序一起使用时,它运行良好,没有显示错误。当我将此模块与子例程一起使用时,它显示:

此模块已定义

试图正确地总结代码。 以下是可复制代码:

subroutine polygoneclipping(n,vtable0,vcoord0,BOUNDARYPOINTS0,NEWvcoord0,Unumber)

use SutherlandHodgmanUtil
 only : polygon,sutherlandHodgman,edgeClipping

type(polygon) :: p1, p2, res
integer :: c, n 
double precision, dimension(2) :: y1, y2
integer(kind =3) :: i, Unumber
integer(kind =3), dimension(40,1) :: vtable0
real(kind =3), dimension(40,2) :: VCOORD0
real(kind =3), dimension(4,2) :: BOUNDARYPOINTS0
real(kind =3), dimension(40,2) :: NEWvcoord0

!MAIN SUB PART

end subroutine

module SutherlandHodgmanUtil

type polygon
!type for polygons
! when you define a polygon, the first and the last vertices have to be the same
integer :: n
double precision, dimension(:,:), allocatable :: vertex
end type polygon

contains 

subroutine sutherlandHodgman( ref, clip, outputPolygon )

type(polygon) :: ref, clip, outputPolygon

type(polygon) :: workPolygon               ! polygon clipped step by step 
double precision, dimension(2) :: y1,y2    ! vertices of edge to clip workPolygon
integer :: i  

!MAIN SUB PART

end subroutine sutherlandHodgman

subroutine edgeClipping( poly, y1, y2, outputPoly )

type(polygon) :: poly, outputPoly
double precision, dimension(2) :: y1, y2, x1, x2, intersecPoint
integer ::  i, c

!MAIN SUB PART

end subroutine edgeClipping

function intersection( x1, x2, y1, y2)
double precision, dimension(2) :: x1, x2, &  ! points of the segment
                        y1, y2     ! points of the line

double precision, dimension(2) :: intersection, vx, vy, x1y1 
double precision :: a

!MAIN FUNC PART

end function intersection

function inside( p, y1, y2)
double precision, dimension(2) :: p, y1, y2, v1, v2
logical :: inside

!MAIN FUNC PART

end function inside

end module SutherlandHodgmanUtil
这个错误是什么?为什么会出现


我很乐意得到任何帮助,并原谅我的代码太长。

如果我运行您的代码,我会收到以下错误消息

a.f90:3:7:

    3 |   use SutherlandHodgmanUtil
      |       1
Fatal Error: Cannot open module file ‘sutherlandhodgmanutil.mod’ for reading at (1): No such file or directory
解释:在Fortran语言中,没有自动编码。 这意味着试图包含
sutherlandhodgmanutil
的子例程失败,因为模块尚未定义

解决方案:

  • 在模块后面定义子例程
  • 首选方法:为模块创建一个单独的文件,然后首先编译模块

  • 您的错误消息

    a.f90:3:7:
    
        3 |   use SutherlandHodgmanUtil
          |       1
    Fatal Error: Cannot open module file ‘sutherlandhodgmanutil.mod’ for reading at (1): No such file or directory
    
    此模块已定义

    可能是因为您事先已经编译了模块
    SutherlandHodgmanUtil
    ? 来自不同的文件或不同的测试运行? 但这只是一个猜测


    顺便说一下,我必须更改您的代码,因为我的机器上没有
    integer(kind=3)

    通常,最好使用独立于机器的种类定义,例如签出
    使用iso_fortran_env,仅限:int32、real32

    如何使用
    子程序polygoneclipping
    ?请提供一个
    程序
    ,并说明如何分割文件。@jack编译上述子例程时出现此错误。请告诉我们更多信息。哪个文件中到底是什么?您正在运行哪些确切的命令?正如jack的回答所示,如果您只运行上面显示的代码,则会出现不同的错误。