角色元素功能.为接口提供一个参数作为字符长度



问题是,当我将integer charlen作为字符元素函数的长度定义传递时,为什么我会收到一个错误,说是一个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

更新

亚历山大的解决方案在代码中:

魅力.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

charlen是在程序范围内定义的,但函数adjR在该范围之外。因此,charlen不可访问,并且由于该函数没有定义implicit none,因此将其解释为实变量。

一种解决方案是将adjR放入模块中,并charlen模块变量。

相关内容

  • 没有找到相关文章

最新更新