我有一个用户定义的类型vector
。在另一种类型中,我有一个可分配的向量数组。我想要一个指向这个可分配数组中的单个向量的指针。所以我想我会这样做:
type another_type
type(vector),allocatable,target::my_vectors(:)
end type
and
type(vector),pointer::pointed_vec
但是当我编译时,编译器抱怨:
This attribute specification is not valid for a component definition statement.
我可以有一个指向可分配数组中单个项目的指针吗?是否可以?
只有变量或派生类型的实际实例才可以具有TARGET
属性。因此,第二个类型定义中的可分配不能是目标,因为这只是类型应该是什么样子的描述,如果您愿意的话,可以是模板。
但是,您可以给出该类型的真实实例TARGET
属性,然后使用适当声明的 Fortran 指针指向它的任何组成部分。
Editted:另一种选择,可能更多的是你所追求的,是给向量数组类型POINTER
仅属性,这隐式使其成为合法的指针对象并可用于分配内存。您只需确保不重新分配指针(v
在下面的示例中)在您使用它来分配内存之后,因为这样您就会发生泄漏。
PROGRAM so_pointtype
IMPLICIT NONE
TYPE vec
INTEGER :: x = 2, y = 3
END TYPE vec
TYPE foo
TYPE(vec),POINTER :: v(:)
END TYPE foo
TYPE(foo) :: z
TYPE(vec),DIMENSION(:),POINTER :: p2 => NULL()
ALLOCATE(z%v(3))
PRINT*,z%v(:)
p2 => z%v(:)
PRINT*,p2
END PROGRAM so_pointtype
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)