2014-11-12 1 views
0

Я не могу понять, как эти две функции производят неоднозначность. Если типы изменены на целые или реальные, компилятор не имеет значения .Функция Значения

Function split_to_str_unidim & 
    (       & 
    a, delim, mold,   & 
    pos      & 
)       & 
    Result (bn) 

    Character (len=*), Intent (in) :: a, delim, mold 
    Character (len=*), Intent (in), Optional :: pos 

    Character (len=65), Allocatable :: bn(:) 

End Function 


Function split_to_str  & 
    (       & 
    a, delim, b1, b2,  & 
    b3, b4, b5, b6, b7, b8, & 
    pos      & 
)       & 
    Result (b) 

    Character (len=*), Intent (in) :: a, delim 
    Character (len=*), Intent (in), Optional :: pos 

    Character (len=*), Intent (out) :: b1, b2 
    Character (len=*), Intent (out), Optional :: b3, b4, b5, b6, b7, b8 
    Logical :: b 

End Function 

ответ

1

Вызов таких как

split_to_str(a,b,c,d) 

где a,b,c,d являются все строки не могут быть однозначно определены только с одним из ваших двух функций. Это неоднозначно.

Чтобы устранить двусмысленность, вам нужно будет сделать подписи (необязательный, список целей (в)) уникальным. Из вашего недавнего следствия Qs. Как вы уже обсуждали это с другими, мне нечего добавить к тому, что было раньше.

Я удивлен, что изменение типа от character(len=*) до real или integer не имеет такой проблемы.

+0

Любое предложение о том, как можно устранить эту проблему? – Zeus

+2

Не помещайте две функции в интерфейс (который, как я полагаю, вы сделали). Просто позвоните соответствующему в зависимости от контекста. – bdforbes