2016-04-22 2 views
0

У меня есть следующий код: FortranOOP Ошибка Fortran

module class_MAT 
    implicit none 
    private 
    public :: load_coo 

    type Mat_CSR 
    real, dimension(:), allocatable :: val, colInd, rowPtr 
    end type Mat_CSR 

contains 
    subroutine load_coo(filename, this) 
    implicit none 

    type(mat_csr) :: this 
    character(len=50) , intent(in) :: filename 
    character(len=200) :: line 
    real, dimension(:), allocatable :: val, colInd, rowPtr 
    integer :: i 

    open(unit=7, file = filename) 
    do i = 1,10 
     read(7, '(A)') line 
     write (*,*) line 
    end do 

    !allocate(v(n,2)) 

    close(7) 
    end subroutine load_coo 
end module class_MAT 


program main 
    use class_MAT 
    implicit none 

    type(Mat_CSR) :: m 
end program main 

Я в основном адаптирована моя программа из этого примера: http://fortranwiki.org/fortran/show/Object-oriented+programming

Однако я получаю эту ошибку:

gfortran main.f08 -o main -std=f2008 -O2 
main.f08:37.15: 

    type(Mat_CSR) :: m 
       1 
Error: Derived type 'mat_csr' at (1) is being used before it is defined 

Я запускаю свою программу с use class_MAT, поэтому я не понимаю, почему компилятор не знает о Mat_CSR. Как исправить эту ошибку? Я провел свой пример, и все работает отлично.

ответ

2

Ваш модуль (в строке 3) объявляет все объекты private, кроме load_coo (строка 4). Затем вы заходите вперед и пытаетесь использовать одно из этих частных объектов в своей программе.

Смежные вопросы