请看一下这段代码,为什么会有问题,我怎么能这样做呢?
program main
type matrix(m,n)
integer::m,n
double precision,dimension(1:m,1:n)::value
end type matrix
type(matrix(2,3))::B
print*,"OK"
end program
关于这个的另一个问题是:我可以有一个类型定义或模块定义,后面跟一个参数列表吗?因为我从书中看到了这段代码,不知道为什么我无法编译它。
答案 0 :(得分:3)
不考虑MSB关于定义matrix
的观点,如果你有一个最新的编译器,你可以定义并声明参数化定义类型而不是这样:
type matrix(m,n,k)
integer, len :: m,n
integer, kind :: k
real(kind=k), dimension(m,n) :: elements
end type matrix
...
type(matrix(4,3,selected_real_kind(0.0)) :: the_matrix
注意:
m,n,k
在其声明中具有特殊属性,len
或kind
; 答案 1 :(得分:2)
program main
type matrix
integer:: m, n
double precision, dimension(:,:), allocatable :: value
end type matrix
type (matrix) :: mat1, mat2
mat1 % m = 2
mat1 % n = 3
allocate ( mat1 % value ( mat1 % m, mat1 % n ) )
mat1 % value = 5.0
mat2 % m = 4
mat2 % n = 5
allocate ( mat2 % value ( mat2 % m, mat2 % n ) )
mat2 % value = 6.0
print*,"OK"
end program
一个很好的例子,但是没有理由在实际代码中创建这个特定的用户定义类型,因为你可以用lbound
和ubound
获得矩阵的边界 - 你没有将它们存储在一个类型中。