函数没有隐式类型

时间:2013-07-19 17:13:16

标签: fortran fortran90

我正在努力学习使用函数。我有以下代码:

program main
  implicit none

  write(*,*) test(4)
end program

integer function test(n)
  implicit none
  integer, intent(in) :: n
  integer :: i, ans

  ans=1
  do i=1,n
  ans=ans*i
  enddo

  test=ans
end function test

当我编译(使用gfortran 4.1.2)时,我收到以下错误:

In file test.f90:4

  write(*,*) test(4)
           1
Error: Function 'test' at (1) has no IMPLICIT type

4 个答案:

答案 0 :(得分:12)

移动线

end program

到源文件的末尾,并在其位置写下行

contains

在编写程序时,它不知道函数test,这是编译器告诉你的。我已经提出了一种方法,可以为程序提供所需的知识,但还有其他方法。由于你是一个学习者,我会让你弄清楚究竟发生了什么。

答案 1 :(得分:9)

以防万一,有人有同样的问题另一种方式(特别是对于评论中讨论的情况)是添加

integer,external :: test

implicit none

在主程序中。

答案 2 :(得分:3)

就这样说:

program main
  implicit none

整数测试

  write(*,*) test(4)
end program
...

您需要将该函数声明为变量,以便编译器知道函数的返回类型。

答案 3 :(得分:2)

Another simple way, not mentioned in the current answers:

Move the function before the main program, put module subs, implicit none and contains before the function and end module after the function. The put use subs into your program.

This way the program can see everything necessary ("explicit interface") about the procedures in the subs module and will know how to call them correctly. The compiler will be able to provide warnings and error messages if you try to call the procedures incorrectly.

module subs
  implicit none
contains
  integer function test(n)
    !implicit none no longer necessary here
  end function test
end module

program main
  use subs
  implicit none