子程序缺少显式接口 [英] Missing explicit interface for subroutine
问题描述
我只想将带有可变行的两列文本文件读入数组. 文本文件的第一列是以秒为单位的时间,第二列是温度.就是这样:
I just want to read a two-column text file with variable lines into an array. The first column of the text file is time in the unit of second, and the second is temperature. Just like this:
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
当我编译它时,我得到了这个:
When I compile it, I got this :
错误#8055:该过程具有一个虚拟参数,该参数具有ALLOCATABLE,ASYNCHRONOUS,OPTIONAL,POINTER,TARGET,VALUE或VOLATILE属性.原始来源缺少必需的显式接口. [TIME_TEMP_ARR]
error #8055: The procedure has a dummy argument that has the ALLOCATABLE, ASYNCHRONOUS, OPTIONAL, POINTER, TARGET, VALUE or VOLATILE attribute. Required explicit interface is missing from original source. [TIME_TEMP_ARR]
关于如何解决此错误的任何想法,谢谢您的帮助.
Any idea on how to fix this error, thanks for any help.
推荐答案
将子例程File2Arr
放入模块MyData
内(并删除该子例程内的use mydata
行).它编译了&为我而奔跑.
Put your subroutine File2Arr
inside the module MyData
(and remove the use mydata
line inside that subroutine). It compiled & ran for me doing that.
这篇关于子程序缺少显式接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!