Die Frage ist, warum ich einen Fehler bekomme, der charlen
ist ein real
, wenn ich es als die Länge Definition einer Zeichenelementfunktion übergeben. Um genauer zu sein, die Folowing MWEWerke:Charakter elementare Funktion. Geben Sie einen Parameter als Zeichenlänge an die Schnittstelle?
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
aber die Linie integer,parameter :: charlen = 20
tut nichts. Wenn ich Definitionen ändern, um die Funktion und Schnittstelle wie diese
character(len=charlen) elemental function adjR(a)
ich die folgende Fehlermeldung erhalten:
charmin.f90:7:14:
character(len=charlen) elemental function adjR(a)
1
Error: Expression at (1) must be of INTEGER type, found REAL
UPDATE
Die Lösung von Alexander im Code ist:
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
zu kompilieren:
gfortran -c char_mod.f90
gfortran charmin.f90 char_mod.f90 -o program
Vielen Dank! Ich habe eine Reihe von Fehlern, bis ich merkte, dass ich den Schnittstellenblock entfernen muss! Es funktioniert, und ich denke, es ist das erste Mal, dass ich wirklich ein Modul brauche, um ein Problem zu lösen. –