我打算将同一过程指向两个不同的过程,但是我没有Fortran的程序员经验,因此我需要帮助。 这是我的简单代码:
module types
type :: type_one
integer, private :: a1,a2
contains
procedure, public :: f_data => set_data_a1
procedure, public :: f_data => cal_data_a2
end type type_one
private :: set_data_a1,cal_data_a2
contains
integer function set_data_a1(this)
class(type_one) :: this
this%a1 = 2
end function set_data_a1
integer function calc_data_a2(this)
class(type_one) :: this
this%a2 = this%a1 + 3
end function calc_data_a2
end module types
program types_pro
implicit none
type(type_one) :: type_obj
type_obj%f_data()
end program types_pro
我收到此错误: `已经有一个绑定名称为'f_data'的过程,用于派生类型'type_one'|
是否可以使用type_obj%f_data()
同时调用两个过程?
答案 0 :(得分:2)
一个通用名称,例如您的f_data
,允许使用相同名称调用具有不同输入签名(等级,类型,种类和参数数量)的过程。但是,由于它们具有相同的参数签名,因此编译器无法确定在代码调用calc_data_a1
时执行calc_data_a2
和f_data
中的哪个。
哪个问题带给我一个问题:您希望编译器或代码的行为如何?您要编译器做什么?(好,这是两个问题。)
通常,如果希望编译器执行两个过程,则必须进行两次调用。我想,如果要在一个过程被调用时同时运行,可以让一个过程调用另一个过程。
如果要将多个函数包装在同一个名称后面,则它们必须具有不同的输入签名,以便编译器可以确定要调用的函数。
很显然,我对这个答案的早期版本不够明确:
否,无法编写代码来执行两个不同的过程以响应对其中一个的调用。 (除非,一个被另一个调用。)此外,期望一个(过程)指针在任何时候指向多个目标都是不合理的。