作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用子例程 sum_real 访问数组派生类型中数组的元素。即:对所有人的权重中的第一个条目求和。
type my_type
real, dimension(:), allocatable :: weight
real :: total_weight
end type my_type
type (my_type), dimension (:), allocatable :: people
type (my_type) :: answer
allocate (people (2))
allocate (people (1)%weight(2))
allocate (people (2)%weight(2))
people (1) % weight(1) = 1
people (2) % weight(1) = 1
people (1) % weight(2) = 3
people (2) % weight(2) = 3
call sum_real ( people (:) % weight(1), answer % total_weight )
error #7828: The part-name to the right of a part-ref with nonzero rank has the ALLOCATABLE attribute (6.1.2). [WEIGHT]
最佳答案
如果您的组件是可分配的,则您尝试的操作是不可能的。引用( 6.1.2
)实际上是对官方标准文档的引用,禁止这样做。
原因很简单,可分配的组件(标量或数组)存储在与派生类型本身不同的内存部分。因此,如果你写
sum(people%total_weight)
people%total_weight = 0
total_weight
不可分配,它存储在派生类型中,编译器只是进入一个简单的循环并将一个又一个字段设置为零。可以知道每个
%totalweight
的地址预先。
sum(people%weight)
people%weight = 0
%weight
存储在其他地方,您没有任何简单的公式来计算每个
%weight(i)
的位置.
real, dimension(2) :: weight
s = 0
do i = 1, size(people)
S = S + sum(people(i)%weight)
end do
关于arrays - 错误 : The part-name to the right of a part-ref with nonzero rank has the ALLOCATABLE attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27183800/
我是一名优秀的程序员,十分优秀!