gpt4 book ai didi

fortran - 在 Fortran 2003 中测试空参数

转载 作者:行者123 更新时间:2023-12-04 05:30:04 25 4
gpt4 key购买 nike

我已经声明了一个递归类型:

type treeNode
private
class(treeNode), pointer :: left => null()
class(treeNode), pointer :: right => null()
contains
procedure, non_overridable :: IsNull ! Returns true if link is null
end type treeNode

我现在希望实现“IsNull”功能。
! ----
pure function IsNull( theNode )
logical(LGT) :: IsNull
class(treeNode), pointer, intent(IN) :: theNode

IsNull = .not. associated( theNode )

end function IsNull

Gfortran 提示指针属性:
“错误:(1) 处‘isnull’的传递对象虚拟参数不能是指针”

如果我删除指针属性,替换为目标属性(或什么都没有),我将无法使用关联的构造。 gfortran 也不会让我测试与 null() 的等价性。

问题:如何测试实际参数是否为空?

最佳答案

你不能,反正不是这样。请参阅 F2008 的 4.5.4.5 中描述的传递对象虚拟参数的特征。此外,如果用于引用过程的对象(object%IsNull() 中的对象)未关联,那么您的程序可能无论如何都会爆炸(您违反了 F2008 12.5.1p2)。

你真的需要 IsNull 过程来进行类型绑定(bind)吗?您可以只使用“常规”程序吗?

关于fortran - 在 Fortran 2003 中测试空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com