【问题标题】:Fortran Derived Type - Public Pointer to a Private ArrayFortran 派生类型 - 指向私有数组的公共指针
【发布时间】:2023-03-26 08:11:01
【问题描述】:

我正在尝试定义具有私有可分配数组的 Fortran 派生类型。但是,我希望能够通过公共指针访问该数组以在其他模块中使用。例如

type,public :: test
private
 real,allocatable :: a(:,:,:)
contains
 real,pointer,dimension(:,:,:),public :: point => a
end type test

我只是在像上面那样尝试时遇到编译器错误。

如果不编写一个为我做指向的子程序,这可能吗?

【问题讨论】:

    标签: pointers fortran derived-types


    【解决方案1】:

    没有。

    语法错误可能是因为您在类型定义的类型绑定过程部分(包含之后)中有指针组件,而不是在组件部分(包含之前)。

    除了语法之外,你想做的还有一些问题:

    • 您不能将指针与类型定义的组件相关联。指针可以与对象(子对象)的组件相关联。同样,您不能将指针与没有目标属性的东西相关联。类型和类型的组件不能具有目标属性。该类型的变量或对象的指针组件指向的对象可能具有目标属性。

    • 您不能将指针与未分配的内容相关联。如果某些东西没有分配,那么就没有任何东西可以指向。

    • 指针组件的初始化程序不能引用可分配的东西。除了目标属性之外,它所指的事物还必须具有 SAVE 属性。与 TARGET 属性一样,变量具有 save 属性,而不是类型或组件定义。

    • 将指针与对象的组件相关联可能会破坏首先将组件设为私有的点。这就引出了一个问题——你想做什么?

    【讨论】:

    • 一个全面的答案,谢谢。我有一些使用派生类型数组作为私有的 Fortran 代码,并且有一个与指向私有数组的类型相关联的“点”函数。但是,我正在尝试在程序的其他部分使用 OpenACC 指令,但它们不适用于指针子例程,因此我试图找到解决方法。我会尝试将指针保留为空,并在分配数组后将其指向,再次感谢您的回答!
    • 您可以将其设置为指向类型构造函数中的正确位置。
    • 为了清楚起见...... Fortran 中的结构构造函数看起来像函数(在没有任何类型参数规范的情况下)。用户提供的遵循该模式并作为函数实现的“构造函数”(可能隐藏真正的结构构造函数)实际上不能用于将一个组件与另一个组件相关联的指针 - 指针与不久后将不复存在的东西相关联函数返回。您必须使用子例程进行构造。请注意指针的关联状态可能随后变得未定义的多种方式。
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多