我对fortran中子程序中的循环有疑问。
如果我把它作为子程序,那么我希望变量test成为1到5的数组。
P.S。 type3
定义为real, dimension(5,1)
subroutine build(test)
type(typelist) :: test
do i = 1, 5
test%type3(i) = i
end subroutine build
但是这会产生错误;
||Error: Rank mismatch in array reference (1/2)|
当我在测试%type3之后删除“(i)”时,它会起作用,但结果是5.000 5.000 5.000 5.000 5.000。因此它只将最后一个循环的值赋给数组中的所有条目。 如果我删除了%test,程序就不知道变量测试的类型了,它给出了
||Error: Unclassifiable statement |
有人能告诉我我做错了吗?
答案 0 :(得分:2)
您是否忘记分配test%type3(i,1) = i
?
由于type3
是一个2D数组,因此需要两个索引来分配值。当您键入test%type3 = i
时,您将使用相同的值同时分配所有元素。这就是为什么最终你得到所有5.0
。
PS。 ENDDO
声明在哪里?