我无法弄清楚我的错误是什么,我在问题上进行了搜索,“隐式无”,并将eyery变量声明为我使用的整数,但仍然出现以下错误:
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
谢谢 :)
lanH的答案是正确的。建议的三种解决方案是:
1)“在主程序中提供Collatzf类型的声明”,这意味着添加
INTEGER :: Collatzf
PROGRAM ProjectEuler14中变量声明的声明。
2)“为Collatzf功能提供接口主体”,这意味着添加
INTERFACE
FUNCTION Collatzf (i)
INTEGER :: Collatzf
INTEGER, INTENT(IN) :: i
END FUNCTION Collatzf
END INTERFACE
对“ PROGRAM ProjectEuler14”中变量声明的声明。
3)“使该函数执行模块过程,然后在主程序中使用该模块”,这意味着创建一个新文件,名为(为简单起见)“ 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
然后首先通过以下方式编译functions.f90:
gfortran -c functions.f90
并将已编译的“功能”模块链接到您的主程序中:
gfortran main.f90 functions.o
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句