gpt4 book ai didi

fortran - 在 Gfortran 中使用可选参数时接口(interface)不明确

转载 作者:行者123 更新时间:2023-12-01 13:17:12 24 4
gpt4 key购买 nike

我在编译一段代码时偶然发现了这个错误,我已经使用了很长时间没有出现问题。我在 Linux 上使用 Gfortran 8.2,我怀疑是编译器更新导致了这个问题。

当我定义一个带有可选参数的接口(interface)时,该接口(interface)具有不同数量的非可选参数,Gfortran 会提示该接口(interface)不明确。例如,如果我编译以下内容,我会得到“在 (1) 处的‘testinit1’和在 (2) 处的‘testinit2’的通用接口(interface)‘test’中的模糊接口(interface)”:

module test_mod
implicit none

interface Test
module procedure test1, test2
end interface

contains

function test1(opt) result(rslt)
integer :: rslt
integer, optional :: opt
rslt = 1
end function

function test2(data, opt) result(rslt)
integer :: rslt
integer :: data
integer, optional :: opt
rslt = data
end function

end module

如果我删除可选参数 opt,那么它可以正常编译。如果我向 test1 添加一个 data 参数,它与 test2 的数据具有不同的等级,那么它编译得很好。如果我向两个函数添加另一个非可选参数,我会收到相同的错误消息。

我偶然发现的实际代码是this file 中的Result 接口(interface)。 ,正如我所说,过去常常按预期进行编译。

感谢任何帮助!

最佳答案

Gfortran complains that the interface is ambiguous

嗯,那是因为界面不明确。下面的调用应该选择哪个过程?

integer :: param
print *, Test(param)
  1. test1 参数 opt 选择加入?或者……
  2. test2 参数 data 已通过且 opt 已退出?

如果它只是在更新后才开始失败,那可能是一个非常受欢迎的错误修复。

If I remove the optional argument opt, then it compiles fine. If I add a data argument to test1 that has a different rank to test2's data, then it compiles fine.

有道理。如果没有可选参数,这两个函数在参数数量上是完全明确的。改变参数的等级也会导致分化。

If I add another non-optional argument to both functions, I get the same error message.

同样的问题。如果这两个函数都有一个额外的非可选参数并且符合类型-种类-等级,您将如何解决调用?假设新参数是 data_extra:

print*, Test(param1, param2)
  1. test1 参数 data_extra 已通过且 opt 已选择加入?或者……
  2. test2 参数 datadata_extra 已通过且 opt 已退出?

关于fortran - 在 Gfortran 中使用可选参数时接口(interface)不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724340/

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