Я только что наткнулся на эту ошибку при компиляции небольшого количества кода, который я использовал без проблем уже целую вечность.Я использую Gfortran 8.2 в Linux и подозреваю, что обновление компилятора вызвало проблему.
Когда я определяю интерфейс с необязательным аргументом, который имеет другое количество необязательных аргументов, Gfortran жалуется, чтоИнтерфейс неоднозначен.Например, если я скомпилирую следующее, я получу «Неоднозначные интерфейсы в универсальном интерфейсе« test »для« testinit1 »в (1) и« testinit2 »в (2)»:
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
, тогда он компилируется нормально.Если я добавлю data
аргумент к test1
, который имеет ранг, отличающийся от данных test2
, то он прекрасно скомпилируется.Если я добавлю другой необязательный аргумент в обе функции, я получу одно и то же сообщение об ошибке.
Фактический код, с которым я наткнулся, - это Result
интерфейс в этом файле , который,как я уже говорил, раньше компилировал как положено.
Любая помощь приветствуется!