fortran statement Fehlende explizite Schnittstelle für Subroutine




fortran use statement (2)

Setzen Sie Ihre Subroutine File2Arr in das Modul MyData (und entfernen Sie die Zeile use mydata verwenden in dieser Subroutine). Es kompilierte und lief für mich dabei.

Ich möchte nur eine zweispaltige Textdatei mit variablen Zeilen in einem Array lesen. Die erste Spalte der Textdatei ist die Zeit in der Einheit der Sekunde und die zweite Spalte ist die Temperatur. Genau wie dieser:

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

Folgendes ist der Code, den ich schreibe:

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

Wenn ich es kompiliere, habe ich folgendes:

Fehler # 8055: Die Prozedur hat ein Dummy-Argument mit dem Attribut ALLOCATABLE, ASYNCHRONOUS, OPTIONAL, POINTER, TARGET, VALUE oder VOLATILE. Die erforderliche explizite Schnittstelle fehlt in der ursprünglichen Quelle. [TIME_TEMP_ARR]

Irgendeine Idee, wie man diesen Fehler beheben kann, danke für jede Hilfe.


Alternativ zum Hinzufügen Ihres Unterprogramms File2Arr zu Ihrem Modul MyData können Sie es auch direkt in Ihr Programm MyData , indem Sie das CONTAINS Schlüsselwort verwenden (hier können Sie auch die Zeile use mydata , die in der Subroutine verwendet wird).