缺少子例程的显式接口

Missing explicit interface for subroutine

提问人:Valuex 提问时间:6/2/2013 最后编辑:milancurcicValuex 更新时间:6/4/2013 访问量:6572

问:

我只想将一个带有可变行的两列文本文件读入数组。 文本文件的第一列是以秒为单位的时间,第二列是温度。就像这样:

    1.1 10
    2.1 20
    3.2 30
    4.2 40
    5.3 50
    6.3 60
    7.4 70

以下是我编写的代码:

module myData
    type line_info
        real :: time
        real :: temp
    end type

    type datalink
        type(line_info) :: time_temp
        type(datalink), pointer :: next
    end type

    type(line_info), allocatable :: FileInfoArr(:)
end module

program Console1
    use myData
    implicit none

    ! Variables
    type(line_info),allocatable :: time_temp_arr(:)
    !real,allocatable :: File2Arr(:)
    character (len=80) :: FileFullName="C:\t.txt"       
    call File2Arr(FileFullName,time_temp_arr)   



End Program Console1

Subroutine File2Arr(FileFullName,InfoArray)
    use myData
    character (len=80) :: FileFullName
    type(line_info),allocatable :: InfoArray(:)
    type(datalink), pointer :: head
    type(datalink), pointer :: p
    integer error,size,i


    logical alive  
    ! check if file exists
    inquire(file=FileFullName, exist=alive)
    if(alive==0) then
        write(*,*) FileFullName, "doesn't exist."
        stop
    end if

    ! read file using pointer   
    open(10, file=FileFullName, status="old", iostat=error)
    if(error/=0) then
        write(*,*) "open file fail!"
        stop
    end if

    allocate(head)
    nullify(head%next)
    p=>head
    size=0
    !read(10,"(A80)") tempstr
    do while(.true.)
        read(10, fmt=*, iostat=error) p%time_temp
        if(error/=0) exit
        size=size+1
        allocate(p%next, stat=error) ! add next line
        if(error/=0) then
            write(*,*) "Out of memory!"
            stop
        end if      
        p=>p%next
        nullify(p%next)
    end do
    !save link info into an array
    allocate(InfoArray(size))
    p=>head
    i=0
    do while(associated(p%next))
      i=i+1
      InfoArray(i)=p%time_temp
      p=>p%next 
      !write(*,*) FileInfoArr(i)%time, FileInfoArr(i)%temp
    end do 

End Subroutine

当我编译它时,我得到了这个:

错误 #8055:该过程具有一个虚拟参数,该参数具有 ALLOCATABLE、ASYNCHRONOUS、OPTIONAL、POINTER、TARGET、VALUE 或 VOLATILE 属性。原始源中缺少所需的显式接口。[TIME_TEMP_ARR]

关于如何修复此错误的任何想法,感谢您的任何帮助。

福特兰

评论

1赞 Vladimir F Героям слава 6/2/2013
错误消息是相当不言自明的,例程需要一个显式的接口,最好按照 Kyle 的建议将其放在模块中来完成。

答:

3赞 Kyle Kanos 6/2/2013 #1

将子例程放在模块内(并删除该子例程内的行)。它为我编译并运行。File2ArrMyDatause mydata

1赞 Stefan 6/4/2013 #2

或者,除了将子例程添加到模块中,也可以使用关键字将其直接放入程序中(此处也可以删除子例程中的行)。File2ArrMyDataCONTAINSuse mydata