考虑以下代码:
subroutine tao_show_this ()
implicit none
type b_struct
integer, pointer :: good_user => null()
end type
type a_struct
type (b_struct), allocatable :: value_ptr(:)
end type
type (a_struct) a
a = a_struct()
end subroutine
使用gfortran 5或7进行编译会得出:
gfortran -c test.f90
test.f90:4:13:
type b_struct
1
Error: The rank of the element in the structure constructor at (1) does not match that of the component (0/1)
此代码使用ifort可以正常编译。这是gfortran错误还是我的代码有问题?
答案 0 :(得分:1)
对于默认结构构造函数,Fortran 2008中引入了一项功能,即可以忽略可分配组件的值。
gfortran具有not currently support this feature(“未实现的功能”)。
要保留未分配的组件,同时仍给构造函数赋值的一种引用null
:
a = a_struct(NULL())