对于可能在这里提出这样一个基本问题,我深表歉意,我是使用英特尔 Fortran 编程的新手,所以我认为在这种情况下,我不知道有一些东西丢失或组织错误。如果有人能在这方面帮助我,我将不胜感激。
问题是我在编译代码时看到以下错误,而我相信我已经声明了派生类型变量cr
and me
正确。
error #6633: The type of the actual argument differs from the type of the dummy argument. [CR]
error #6633: The type of the actual argument differs from the type of the dummy argument. [ME]
我的代码包含一个名为InputData
其中包含派生类型的定义grid
以及派生类型变量的声明cr
and me
类型的grid
。我在主程序中使用这些定义USE
陈述。该错误是指主程序中的一行CALLs
一个内部子程序使用cr
和“me”作为输入参数(INTENT(IN)
)。令人惊讶的是,我使用完全相同的方式来声明派生类型变量ls
类型的Levelset
模块中定义OutputData
用一个USE
主程序中的语句,并且在同一子例程中该变量上没有错误。添加一个USE InputData
子程序的语句ComputeLS
也没有解决这个问题。程序单元的结构如下:
MODULE InputData
TYPE grid
REAL, DIMENSION(:,:), POINTER :: nodes
INTEGER, DIMENSION(:,:), POINTER :: connectivity
END TYPE grid
TYPE(grid) :: cr, me
CONTAINS
…
END MODULE InputData
MODULE OutputData
TYPE levelset
REAL, DIMENSION(:), POINTER :: f, g
END TYPE levelset
…
TYPE(levelset) :: ls
CONTAINS
…
END MODULE OutputData
PROGRAM Main
USE InputData
USE OutputData
USE Timing
IMPLICIT NONE
INTEGER, DIMENSION(:,:), POINTER :: ed
…
CALL ComputeLS(me, cr, ed, ls) <========= error #6633 refers to this line
…
CONTAINS
! INTERNAL PROCEDURES
SUBROUTINE ComputeLS(me, cr, ed, ls)
USE MathCalc
IMPLICIT NONE
TYPE(grid), INTENT(IN) :: me, cr
INTEGER, DIMENSION(:,:), INTENT(IN) :: ed
TYPE(levelset), INTENT(OUT) :: ls
…
END SUBROUTINE ComputeLS
…
END PROGRAM Main
我尝试删除所有模块并将所有类型定义和变量声明包含在主程序中,而不是包含在单独的模块中。但不幸的是错误仍然存在。