Указатель процедуры, производный тип - PullRequest
6 голосов
/ 31 марта 2011

В Intel Fortran XE 2011 не компилируется следующее:

TYPE type1
    procedure(interface1),POINTER::p
END TYPE type1

ABSTRACT INTERFACE 
    integer function interface1(a)
        real,intent(in)::a    
    END function interface1
END INTERFACE

Ошибка:

error #8262: The passed-object dummy argument must be dummy data object with the same declared type as the type being defined.

1 Ответ

8 голосов
/ 31 марта 2011

Добавьте атрибут nopass к объявлению компонента-указателя процедуры.

procedure(interface1), pointer, nopass :: p

Изменить: В ответ на ваш комментарий, если вы хотите использовать ключевое слово pass, интерфейс должен быть изменен следующим образом:

ABSTRACT INTERFACE 
    integer function interface1(passed_object, a)
        import :: type1
        class(type1), intent(...) :: passed_object
        real,         intent(in)  :: a
    END function interface1
END INTERFACE
...