2

再帰型を宣言しました:

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 はポインター属性について不平を言います:

ポインター属性を削除して、ターゲット属性に置き換えた (または何も置き換えなかった) 場合、関連する構成を使用できません。また、gfortran では null() と同等かどうかをテストすることもできません。

質問: 実際の引数が null であることをテストするにはどうすればよいですか?

4

1 に答える 1

3

とにかく、この方法ではできません。F2008 の 4.5.4.5 に記載されている渡されたオブジェクトの仮引数の特性を参照してください。さらに、プロシージャーの参照に使用されているオブジェクト (object%IsNull() 内のオブジェクト) が関連付けられていない場合、プログラムはとにかく爆発する可能性があります (F2008 12.5.1p2 に違反しています)。

IsNull プロシージャをタイプ バインドする必要は本当にありますか? 「従来の」手順を使用できますか?

于 2012-10-06T01:42:33.367 に答える