Compiler errors 英特尔Fortran错误#6633:实际参数的类型与伪参数的类型不同
请接受我的道歉,我可能会在这里问这样一个基本的问题,我是新的编程与英特尔Fortran,所以我认为有一些东西丢失或错误组织,我不知道在这种情况下。如果有人能在这方面帮助我,我将不胜感激 问题是,我在编译代码时看到以下错误,而我相信我已经正确地声明了派生类型变量Compiler errors 英特尔Fortran错误#6633:实际参数的类型与伪参数的类型不同,compiler-errors,fortran,Compiler Errors,Fortran,请接受我的道歉,我可能会在这里问这样一个基本的问题,我是新的编程与英特尔Fortran,所以我认为有一些东西丢失或错误组织,我不知道在这种情况下。如果有人能在这方面帮助我,我将不胜感激 问题是,我在编译代码时看到以下错误,而我相信我已经正确地声明了派生类型变量cr和me error #6633: The type of the actual argument differs from the type of the dummy argument. [CR] error #6633: The
cr
和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
的定义以及类型grid
的派生类型变量cr
和me
的声明。我使用use
语句在主程序中使用这些定义。错误是指主程序中的一行,调用内部子例程,该子程序使用cr
和“me”作为输入参数(INTENT(in)
)。令人惊讶的是,我在主程序中使用use
语句声明ModuleOutputData
中定义的Levelset
类型的派生类型变量ls
,使用完全相同的方法,并且在同一子例程中该变量没有错误。将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
模块输入数据
类型网格
实数,维度(:,:),指针::节点
整数,维度(:,:),指针::连接性
端型格栅
类型(网格)::cr,me
包含
…
端模块输入数据
模块输出数据
类型水平集
实数,维(:),指针::f,g
端型水平仪
…
类型(水平集)::ls
包含
…
终端模块输出数据
主程序
使用输入数据
使用OutputData
使用计时
隐式无
整数,维度(:,:),指针::ed
…
CALL ComputeLS(me,cr,ed,ls)我认为这是一个已知的编译器错误,ID DPD200250382,对于我们即将发布的15.0版本已经修复,但是您的部分示例与问题描述有点不同。您是否正在使用我们的Windows编译器并启用了诊断>检查例程接口?如果是这样,请尝试将该选项设置为“否”,看看会发生什么
如果这没有帮助,我希望看到一个完整的测试用例。主程序中如何定义ed
?@AlexanderVogt:“ed”的定义如下;但是,由于错误最后提到[cr]或[me],因此问题似乎与“ed”无关。整数,维(:,:),指针::edMhm,虽然内部过程和模块的组合让我感到困惑(可能还有编译器),但我看不到您发布的内容中有错误。您能否将ComputeLS
放入模块中(例如仅使用InputData:grid
)?另外,一个可编译的示例也不错;-)@亚历山大·沃格特:谢谢。我试图删除所有模块,并在主程序中包括所有类型定义和变量声明,而不是在单独的模块中。但不幸的是,错误仍然存在。@HighPerformanceMark:谢谢。我也曾经认为这个问题是由于伪参数和实际参数的名称相似造成的。我将伪参数更改为“cr_grid”和“me_grid”,但错误仍然存在。这是否表明编译器古怪?你有什么意见吗?谢谢你,史蒂夫。默认情况下,检查例程接口设置为“否”。因此,禁用该设置时会发生错误。你能让我知道我如何能发送一个完整的案例给你吗?在这个网站上有没有任何地方我可以为你上传一个完整的案例?你可以在我们的用户论坛的帖子中附加一个测试案例,如果有多个来源,最好是zip文件。嗨,史蒂夫。我在英特尔论坛的这篇文章中附上了一个测试用例。你得到了答案。