指向多态对象的指针的初始化
Initialization of a pointer to polymorphic object
假设我有一个指向多态对象的指针:
TYPE, ABSTRACT:: ab
ENT TYPE
TYPE, EXTENDS(ab):: co
INTEGER:: i
ENT TYPE
Class(ab), POINTER:: foo
如何在代码的可执行部分将 foo
指向的对象初始化为 co
对象?我在想
foo => co(1) ! WRONG
但这是错误的。
指针只能用具有 save
属性或 null()
的目标初始化。如果你指的是声明部分编译时的初始化。
在代码的可执行部分你当然可以让指针指向一个对象。但是您需要一个具有 target
属性的实际对象,或者您需要使用 allocate()
语句创建一个匿名目标。
co(1)
是表达式或表达式的值结果。你不能指向它,它没有指针属性。您可以使用此值分配一个匿名目标
allocate(foo, source=co(1))
考虑使用 allocatable
而不是 pointer
,它们应该是首选。如果你可以使用allocatable,它就像
一样简单
foo = co(1)
感谢作业中的自动(重新)分配。
假设我有一个指向多态对象的指针:
TYPE, ABSTRACT:: ab
ENT TYPE
TYPE, EXTENDS(ab):: co
INTEGER:: i
ENT TYPE
Class(ab), POINTER:: foo
如何在代码的可执行部分将 foo
指向的对象初始化为 co
对象?我在想
foo => co(1) ! WRONG
但这是错误的。
指针只能用具有 save
属性或 null()
的目标初始化。如果你指的是声明部分编译时的初始化。
在代码的可执行部分你当然可以让指针指向一个对象。但是您需要一个具有 target
属性的实际对象,或者您需要使用 allocate()
语句创建一个匿名目标。
co(1)
是表达式或表达式的值结果。你不能指向它,它没有指针属性。您可以使用此值分配一个匿名目标
allocate(foo, source=co(1))
考虑使用 allocatable
而不是 pointer
,它们应该是首选。如果你可以使用allocatable,它就像
foo = co(1)
感谢作业中的自动(重新)分配。