2011-03-31 24 views
6

aşağıdaki doesnt Intel Fortran XE 2011 yılında derleme:Prosedür Pointer, Türetilmiş Tip

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

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

hatası:

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

cevap

8

prosedür işaretçi bileşeninin ilanına nopass niteliği ekleyin.

procedure(interface1), pointer, nopass :: p 

Düzenleme: Eğer pas anahtar sözcüğü kullanmak istiyorsanız yorumunuza yanıt olarak, arayüz gibi değiştirilmesi gerekir:

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

Teşekkür! Açıklamak ister misiniz, neden bu benim problemimi çözüyor? –

+0

nopass' özniteliğini açıkça belirtmeden, bileşen otomatik olarak "pass" özelliğine sahiptir (bu ayrıca açıkça belirtilebilir). Bu, prosedürün ilk kukla argümanının tanımlanmış olan tipte (hata mesajınızda belirtildiği gibi) olması gerektiği anlamına gelir. Procpointer bileşenine başvurulduğunda, çağrıldığı nesne ilk argüman olarak otomatik olarak geçer. – eriktous

+0

"Geçiş" anahtar kelimesini kullanmak istediğimde 'interface1' öğesini nasıl değiştirmem gerekir? –