For*_*Cpp 2 fortran compiler-errors fortran2003
我正在尝试使用另一种类型的类型。但是,我不能让它编译。我很奇怪:选择类型的东西在主程序中工作,但它在类型的子例程中不起作用。
module ModBuffer
implicit none
private
type, abstract, public :: Buffer
contains
procedure, public :: Constructor
endtype Buffer
type, extends(Buffer), public :: BufferR
real(8), allocatable, public :: BufData(:,:,:)
endtype BufferR
type, extends(Buffer), public :: BufferI
complex(8), allocatable, public :: BufData(:,:,:)
endtype BufferI
contains
subroutine Constructor(this, dim1, dim2, dim3)
class(Buffer), intent(inout) :: this
integer, intent(in) :: dim1, dim2, dim3
select type(this)
type is(BufferR)
allocate(this%BufData(dim1, dim2, dim3))
type is(BufferI)
allocate(this%BufData(dim1, dim2, dim3))
endselect
endsubroutine Constructor
endmodule ModBuffer
module ModSystem
use ModBuffer
implicit none
private
type, public :: System
class(Buffer), allocatable, public :: WF
contains
endtype System
type, extends(System) :: NewSystem
contains
procedure, public :: Constructor
endtype NewSystem
contains
subroutine Constructor(this, Flag)
class(NewSystem), intent(inout) :: this
logical, intent(in) :: Flag
if(Flag) then
allocate(BufferR::this%WF)
else
allocate(BufferI::this%WF)
endif
select type(this%WF)
type is(BufferR)
print *, "Buffer is real."
type is(BufferI)
print *, "Buffer is complex."
endselect
endsubroutine Constructor
endmodule ModSystem
program test
use ModSystem
!use Operation
class(System), allocatable :: s
allocate(NewSystem::s)
call s%Constructor(.true.)
endprogram test
Run Code Online (Sandbox Code Playgroud)
我得到了一个编译错误select type(this%WF)
。但是如果我在主程序中定义一个 Buffer 类型并做同样的事情,就不会出错。
错误信息是:
error #8253: If selector expression in SELECT TYPE is not a named variable, associate-name=> shall appear.
Run Code Online (Sandbox Code Playgroud)
我怎样才能编译这段代码?
没有理由用指针,只用关联部分select type
(你没有写错误信息,但是IIRC它的描述性很强):
select type (twf => this%WF)
Run Code Online (Sandbox Code Playgroud)