【问题标题】:Procedure Pointer, Derived Type过程指针,派生类型
【发布时间】:2011-07-27 00:47:07
【问题描述】:

以下内容无法在 Intel Fortran XE 2011 中编译:

TYPE type1
    procedure(interface1),POINTER::p
END TYPE type1

ABSTRACT INTERFACE 
    integer function interface1(a)
        real,intent(in)::a    
    END function interface1
END INTERFACE

错误:

error #8262: The passed-object dummy argument must be dummy data object with the same declared type as the type being defined.

【问题讨论】:

    标签: pointers fortran function-pointers


    【解决方案1】:

    在过程指针组件的声明中添加nopass属性。

    procedure(interface1), pointer, nopass :: p
    

    编辑:针对您的评论,如果您想使用 pass 关键字,则必须将界面更改为:

    抽象接口 整数函数 interface1(passed_object, a) 进口 :: type1 类(type1),意图(...)::passed_object 真实的,意图(in)::a END函数接口1 结束接口

    【讨论】:

    • 谢谢!您介意解释一下,为什么这可以解决我的问题吗?
    • 如果不显式指定nopass 属性,组件会自动具有pass 属性(也可以显式指定)。这意味着该过程的第一个虚拟参数应该与所定义的类型具有相同的类型(如您的错误消息中所述)。当引用 procpointer 组件时,调用它的对象会自动作为第一个参数传递。
    • 如果我想使用 pass 关键字,我需要如何更改 interface1
    • @user578832:针对您的问题,我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多