我想要一個將數字 字符串的內容轉換爲數值類型(int,real,double precision,real(real128))的子例程。Fortran將字符串轉換爲數字
但是,當嘗試使用Class(*)
時出現錯誤。錯誤 如下所示:
gfortran -o build/lib/larsa.o -c -ffree-form -g -J./build/lib lib/larsa.f
lib/larsa.f:1933.35:
Read (s, frmt, iostat=ios) num
1
Error: Data transfer element at (1) cannot be polymorphic unless
it is processed by a defined input/output procedure
lib/larsa.f:1935.32:
Read (s, *, iostat=ios) num
1
Error: Data transfer element at (1) cannot be polymorphic unless
it is processed by a defined input/output procedure
這是我寫的子程序。
Subroutine converts_str_to_num &
( &
s, num, &
fmt, wrn &
)
Character (len=*), Intent (in) :: s
Character (len=*), Intent (in), Optional :: fmt
Class (*) :: num
Character (len=*), Intent (inout), Optional :: wrn
Integer :: ios
Character (len=65) :: frmt
!!$ Reads contents of s and puts value in i.
If (Present (fmt)) Then
frmt = "(" // Trim (fmt) // ")"
Read (s, frmt, iostat=ios) num
Else
Read (s, *, iostat=ios) num
End If
End Subroutine converts_str_to_num
你的問題是什麼?錯誤消息非常明確:除非使用定義的I/O,否則不能在I/O列表中使用多態變量。你是在「這是什麼意思?」之後? – francescalus 2014-12-05 21:38:31
有沒有解決方法,仍然有'類(*)'在那裏? – Zeus 2014-12-05 21:39:50
@ChristopherDimech是的,使用'select type'構造併爲所有想要處理的類型寫一個case。 – casey 2014-12-05 21:40:54