【发布时间】:2015-09-22 03:08:29
【问题描述】:
我正在尝试使用指针来创建对象之间的链接。使用 Fortran,代码如下:
module base_pars_module
type,abstract,public :: base_pars
end type
end module
module test_parameters_module
use base_pars_module
type, extends(base_pars) :: test_pars
contains
procedure :: whoami
end type
contains
function whoami(this) result(iostat)
class( test_pars) :: this
write(*,*) 'i am a derived type child of base_pars'
end type
end module
module base_mask_module
use base_pars module
type, abstract , public :: base_mask
class(base_pars),pointer :: parameters
end type
end module
module test_mask_module
use base_mask_module
implicit none
type, extends(base_mask) :: test_mask
end type
end module
program driver
type(test_pars) , target :: par_Test
type(test_mask) :: mask_test
iostat= par_test%whoami()
mask_test%parameters=>par_test
iostat=mask_test%parameters%whoami()
end program
parameters at base_mask_module 是一个带有 base_pars 类的指针。我想使用这个指针来引用 par_test 对象,它是扩展 base_pars 类型的 test_pars 类型。所以指针和目标具有相同的类。但是当我编译它时,它给出了一个错误:
driver.f90:17.37:
iostat=mask_test%parameters%whoami()
1
Error: 'whoami' at (1) is not a member of the 'base_pars' structure
这是一个错误还是我做错了什么?
【问题讨论】:
-
此代码无法编译。您在主程序中缺少一些
uses。
标签: class pointers fortran polymorphism