首页 > 解决方案 > 为什么在尝试将派生类型放入模块时收到损坏的模块编译消息?

问题描述

我正在学习如何在 Fortran 95 中跨模块分发代码。

我有以下代码打算使用两种派生类型:

file_parser_2.f95

program file_parser_2

        use data_model_2
        
        implicit none

        ! -------------------
        ! VARIABLE DEFINITION
        ! -------------------
        integer                         :: i, io_result
        integer                         :: lines_read
        type(type1_record)              :: line_read
        type(timestamp_record)          :: timestamp_read
        
        ! -------------------
        ! READ RECORDS
        ! -------------------
        lines_read = 0
        do 

                ! READ LINE TO line_read IF AVAILABLE
                read(*,*,iostat=io_result) line_read
                if (io_result /= 0) exit
        
                ! PARSE TIMESTAMP
                timestamp_read%year = line_read%year
                timestamp_read%month = line_read%month
                timestamp_read%day = line_read%day
                timestamp_read%hour = line_read%hour
                timestamp_read%minute = line_read%minute
                timestamp_read%second = line_read%second
                
                ! DO OTHER STUFF
                ! TBC

        end do

end program

该程序什么都不做,只是读取输入并根据这些字段进行处理。它被故意剥离以涵盖特定问题。

由于这些派生类型将在不同的模块中使用,并且可能在不同的程序中使用,我将它们放在一个单独的模块中,名为 data_model.

data_model_2.f95

module data_model_2
        
        ! -------------------
        ! TYPE DEFINITION
        ! -------------------
        type :: type1_record
                integer                 :: month
                integer                 :: day
                integer                 :: year
                integer                 :: hour
                integer                 :: minute
                integer                 :: second
                integer                 :: value1
                integer                 :: value2
        end type
        type :: timestamp_record
                integer                 :: year
                integer                 :: month
                integer                 :: day
                integer                 :: hour
                integer                 :: minute
                integer                 :: second
        end type

end module

我尝试编译它们,但我收到损坏的模块错误:

$ flang file_parser_2.f95
F90-F-0004-Corrupt or Old Module file ./data_model_2.mod (file_parser_2.f95: 5)
F90/x86-64 FreeBSD Flang - 1.5 2017-05-01: compilation aborted
$ 

为什么我会收到此错误?

标签: fortran95flang

解决方案


推荐阅读