fortran类型不匹配调用函数 [英] fortran type missmatch calling function
问题描述
我无法弄清楚我的错误是什么,我在问题上进行了搜索,隐式无",并将eyery变量声明为我使用的整数,但仍然出现以下错误:
I cant figure out whats my mistake I googled the problem took "implicit none" and declared eyery variable to integer I used but I still get the follwing errors:
main.f95:37.20:
e = Collatzf(i)
1
Error: Return type mismatch of function 'collatzf' at (1) (UNKNOWN/INTEGER(4))
main.f95:37.12:
e = Collatzf(i)
1
Error: Function 'collatzf' at (1) has no IMPLICIT type
这是我的代码:
INTEGER FUNCTION Collatzf(n)
IMPLICIT NONE
INTEGER :: n, z
z = 0
DO WHILE(n /= 1)
IF (MOD(n, 2) == 0) THEN
n = n / 2
ELSE
n = 3 * n + 1
END IF
z = z + 1
END DO
Collatzf = z
END FUNCTION Collatzf
PROGRAM ProjectEuler14
IMPLICIT NONE
INTEGER :: lsg, e, s, i
lsg = 0
e = 0
s = 0
i = 2
DO WHILE(i <= 1000000)
e = Collatzf(i)
IF(e > lsg) THEN
lsg = e
s = i
END IF
i = i + 1
END DO
WRITE(*, *) s, i
END PROGRAM ProjectEuler14
Thx:)
推荐答案
lanH的答案是正确的.建议的三种解决方案是:
lanH's answer is correct. Three suggested solutions are:
1)在主程序中提供Collatzf类型的声明",这意味着添加
1) "Provide a declaration of the type of Collatzf inside the main program", which means adding
INTEGER :: Collatzf
在PROGRAM ProjectEuler14中声明变量的声明.
statement to the variable declaration in PROGRAM ProjectEuler14.
2)为Collatzf函数提供接口主体",这意味着添加
2) "Provide an interface body for Collatzf function", which means means adding
INTERFACE
FUNCTION Collatzf (i)
INTEGER :: Collatzf
INTEGER, INTENT(IN) :: i
END FUNCTION Collatzf
END INTERFACE
"PROGRAM ProjectEuler14"中变量声明的声明.
statements to the variable declaration in "PROGRAM ProjectEuler14".
3)使该函数执行模块过程,然后在主程序中使用该模块",这意味着创建一个新文件,名为(为简单起见)"functions.f90":
3) "Make that function a module procedure, and then USE the module inside the main program", which means creating a new file, named (for simplicity) "functions.f90":
MODULE functions
CONTAINS
INTEGER FUNCTION Collatzf(n)
IMPLICIT NONE
INTEGER :: n, z
z = 0
DO WHILE(n /= 1)
IF (MOD(n, 2) == 0) THEN
n = n / 2
ELSE
n = 3 * n + 1
END IF
z = z + 1
END DO
Collatzf = z
END FUNCTION Collatzf
END MODULE functions
然后首先编译函数f90,例如:
Then compile functions.f90 first by e.g.:
gfortran -c functions.f90
并将已编译的功能"模块链接到您的主程序中:
and link the compiled "functions" module into your main program:
gfortran main.f90 functions.o
这篇关于fortran类型不匹配调用函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!