我是Fortran的新手,我制作了一个程序,其中所有内容都适用于一个文件,这有效。 然而,当我试图取出零件并将它们放入模块和子程序时,我很快就遇到了问题。 即使删除了所有内容并且只剩下最小的剩余部分,它仍然会出现关于子例程的错误。
目前,大幅减少的主程序看起来像这样。它只使用模块并调用子程序。
program test
use mod1
call sub1(var)
end program test
,模块如下:
Module mod1
implicit none
type A
real :: type1
end type A
contains
subroutine sub1(var)
type(A) :: var
var%type1 = 1+1
end subroutine sub1
然而,我似乎在这里做错了,不幸的是我无法弄清楚是什么。我收到了错误
||Error: Type mismatch in argument 'var' ; passed REAL(4) to TYPE(a)|
end module mod1
有人可以解释我为了阻止最基本的子程序工作而犯的哪个根本错误吗?
答案 0 :(得分:4)
在您的程序中,您没有明确声明var
。在以前的日子里,Fortran支持隐式输入,默认情况下,名称以v
开头的变量的类型为real
。 Fortran保留了这种能力,尽管它的使用现在不受欢迎。
我认为你正在考虑(好像我知道你在想什么)程序范围中的var
将以某种方式与子例程中的var
自动关联或相同在模块中。它不会成为。
做这些事情:
implicit none
之后的行上插入use mod1
。var
,例如 type(a) :: var