问题是,当我将integer integer作为字符元素函数的长度定义传递给它时,为什么我会错误地说它是一个real。更确切地说,折叠MWE可以工作。
program chararr
implicit none
!!
integer,parameter :: charlen = 20
!!
interface
character(len=20) elemental function adjR(a)
character(len=*),intent(in) :: a
end function
end interface
!!
character(charlen) :: test(3), testR(3)
test = ["hej", "hoj", "haj"]
testR = adjR(test)
print*, test
print*, testR
end program
character(20) elemental function adjR(a)
character(len=*),intent(in) :: a
adjR = adjustr(a)
end function但是行integer,parameter :: charlen = 20什么也不做。当我像这样更改函数和接口定义时
character(len=charlen) elemental function adjR(a)我得到以下错误:
charmin.f90:7:14:
character(len=charlen) elemental function adjR(a)
1
Error: Expression at (1) must be of INTEGER type, found REAL更新
Alexander的解决方案是在代码中:
charmin.f90:
program chararr
use char_mod, only: charlen, adjR
implicit none
!!
!interface
!character(30) elemental function adjR(a)
!character(len=*),intent(in) :: a
!end function
!end interface
!!!
character(charlen) :: test(3), testR(3)
test = ["hej", "hoj", "haj"]
testR = adjR(test)
print*, test
print*, testR
print*, charlen !!! it is here
end program char_mod.f90:
module char_mod
implicit none
integer,parameter :: charlen = 30
private
public charlen, adjR
contains
character(charlen) elemental function adjR(a)
implicit none
character(len=*),intent(in) :: a
adjR = adjustr(a)
end function
end module汇编:
gfortran -c char_mod.f90
gfortran charmin.f90 char_mod.f90 -o program发布于 2016-07-10 13:33:05
charlen是在程序的作用域中定义的,但是函数adjR不在该范围之内。因此,charlen是不可访问的,而且由于函数没有定义implicit none,所以它被解释为一个真正的变量。
解决方案之一是将adjR放在模块中,并使charlen成为模块变量。
https://stackoverflow.com/questions/38292389
复制相似问题