我打算用相同的程序指向两个不同的程序,但我没有在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()
同时调用这两个程序?
通用名称(例如f_data
)允许使用相同名称调用具有不同输入签名(等级,类型,种类和参数数量)的过程。但是,因为它们具有相同的参数签名,所以当您的代码调用calc_data_a1
时,编译器无法确定执行哪个calc_data_a2
和f_data
。
这让我想到了一个问题:您如何期望编译器或代码的行为?您希望编译器做什么? (好的,这是两个问题。)
作为一般规则,如果您希望编译器执行两个过程,则必须进行两次调用。我想,如果你想在调用一个程序时运行它们,你可以调用另一个程序。
如果要将多个函数包装在同一个名称后面,则必须具有不同的输入签名,以便编译器可以确定要调用哪个函数。
显然我的这个答案的早期版本不够明确:
不,没有办法编写代码来执行两个不同的过程以响应对其中一个的单个调用。 (除非,也就是说,另一个调用另一个。)此外,期望单个(过程)指针在任何时候指向多个目标是不合理的。