Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran类型为(字符)_Fortran - Fatal编程技术网

Fortran类型为(字符)

Fortran类型为(字符),fortran,Fortran,我在尝试使用时遇到以下错误 中的字符类型为 gfortran -o build/lib/larsa.o -c -ffree-form -g -J./build/lib lib/larsa.f lib/larsa.f:1558.14: Type Is (Character) 1 Error: The type-spec at (1) shall specify that each length type parameter is assumed lib/larsa.f:14

我在尝试使用时遇到以下错误
中的
字符
类型为

gfortran -o build/lib/larsa.o -c -ffree-form -g -J./build/lib lib/larsa.f
lib/larsa.f:1558.14:

 Type Is (Character)
          1
Error: The type-spec at (1) shall specify that each length type parameter is assumed
lib/larsa.f:1490.14:

 Type Is (Character)
          1
Error: The type-spec at (1) shall specify that each length type parameter is assumed
这是我编写的子程序

Subroutine splits                    &
  (                                  &
    s, delim,                        &
    t1, t2, t3, t4, t5, t6, t7, t8,  & 
    pos                              &
  )

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

Class (*), Intent (out) :: t1
Class (*), Intent (out), Optional :: t2, t3, t4,  &
          t5, t6, t7, t8

Integer :: nf

Select Type (t1)

 Type Is (Character(len=*))

   If (Present (pos)) Then

     If (Present (t5)) Then

       If (Present (t8)) Then    
         Call splits_str_to_str (s, delim, t1, t2, t3, t4,  &
              t5, t6, t7, t8, pos)
       Else If (Present (t7)) Then
         Call splits_str_to_str (s, delim, t1, t2, t3, t4,  &
              t5, t6, t7, pos)
       Else If (Present (t6)) Then
         Call splits_str_to_str (s, delim, t1, t2, t3, t4,  &
              t5, t6, pos)
此外,我在相当多的参数上使用了无限多态实体。 然后事情就变得复杂起来,需要为所有类型选择
。编译程序
是不是给了我错误

gfortran -o build/lib/larsa.o -c -ffree-form -g -J./build/lib lib/larsa.f
lib/larsa.f:1569.51:

         Call splits_str_to_str (s, delim, t1, t2, t3, t4,  &
                                               1
Error: Type mismatch in argument 's2' at (1); passed CLASS(*) to CHARACTER(1)
lib/larsa.f:1572.51:

         Call splits_str_to_str (s, delim, t1, t2, t3, t4,  &
                                               1
Error: Type mismatch in argument 's2' at (1); passed CLASS(*) to CHARACTER(1)
lib/larsa.f:1575.51:

这只是SELECT类型的语法规则和约束的结果

从概念上讲,类型选择仅限于对象的动态类型和该类型的任何种类参数。要执行的块不是基于长度类型参数选择的,因此语法要求假定长度类型参数的规格

所以你只想:

类型为(字符(*)


如果没有假定的规范,语法的含义是选择器的长度类型参数必须与字符类型的该参数的默认值相匹配,即1。

这只是SELECT类型的语法规则和约束的结果

从概念上讲,类型选择仅限于对象的动态类型和该类型的任何种类参数。要执行的块不是基于长度类型参数选择的,因此语法要求假定长度类型参数的规格

所以你只想:

类型为(字符(*)


如果没有假定的规范,语法的含义是选择器的长度类型参数必须与字符类型的该参数的默认值相匹配,即1。

除了IanH解释的语法问题之外,还必须使用
字符(*)
在选择类型中-我将为您的第二个问题添加一些内容。这可能是一个新问题

不能假定您知道两个对象具有相同的动态类型。您必须在
select type
中将所有这些元素列为选择器,否则未列出的元素将保持多态性。这正是使用
select type
表示
t1
的原因

我还将指出,您的例程
似乎将\u str\u拆分为\u str
接受可选参数。在这种情况下,您不必测试所有参数的显示,您可以将它们作为可选的实际参数传递,即使它们不存在

不幸的是,要在
select type
中使用它们作为选择器,您仍然需要测试它们的存在


还有一个很大的设计问题。为什么没有
拆分
字符
伪参数?为什么它需要无限多态性?

除了IanH解释的语法问题之外-您必须在选择类型中使用
字符(*)
-我将为您的第二个问题添加一些内容。这可能是一个新问题

不能假定您知道两个对象具有相同的动态类型。您必须在
select type
中将所有这些元素列为选择器,否则未列出的元素将保持多态性。这正是使用
select type
表示
t1
的原因

我还将指出,您的例程
似乎将\u str\u拆分为\u str
接受可选参数。在这种情况下,您不必测试所有参数的显示,您可以将它们作为可选的实际参数传递,即使它们不存在

不幸的是,要在
select type
中使用它们作为选择器,您仍然需要测试它们的存在


还有一个很大的设计问题。为什么没有
拆分
字符
伪参数?为什么它需要无限多态性?

是的,参数t2到s8在
splits\u str\u to\u str
中定义为可选参数。因为我希望
splits
不仅能处理字符的拆分,还能处理数字的拆分(整数、实数、双精度、实数(real128))@这听起来像是Fortran 90中普通泛型的一项任务。如果我可以用无限多态性来完成它,它将使我免于拥有大量独立的子例程。唯一的区别在于输出位。这不是我唯一要做的操作,因为我正在做的大多数事情都必须处理不同的类型。你能告诉我如何在选择类型中将它们列为选择器吗?是的,在
splits_stru to_str
中,参数t2到s8被定义为可选参数。因为我想
splits
不仅处理字符的拆分,还处理数字(整数、实数、双精度、实数(real128))@Zeus的拆分,这听起来像是Fortran 90中普通泛型的任务。如果我可以用无限多态性来完成它,它将使我免于拥有大量独立的子程序。唯一的区别在于输出位。这不是我唯一要做的操作,因为我正在做的大多数事情都必须处理不同的类型。你能告诉我如何在选择类型中将它们列为选择器吗?