Ich versuche, eine Klassenprozedur zu schreiben, die ein neues Zeichen zu einem Array von Zeichen hinzufügt, aber stolpern über "unterschiedliche Zeichenlänge in Array-Konstruktor" -Fehler (kompilieren mit GFortran), auch wenn die Zeichenlängen, soweit ich sehen kann, gleich sind.Hinzufügen zu einem Array von Zeichen in Fortran
Hier ist meine Funktion:
subroutine addToArray(this, newElement)
class(MyClass), intent(inout) :: this
character(len=*), intent(in) :: newElement
character(len=256) :: tempElement
character(len=256), dimension(:), allocatable :: temp
tempElement = newElement ! Needed otherwise newElement is of the wrong size
allocate(temp(size(this%charArray)+1) ! Make the char array bigger by 1
temp = [this%charArray, tempElement]
call move_alloc(from=temp, to=this%charArray)
end subroutine
Dies führt zu dem Fehler Fortran runtime error: Different CHARACTER lengths (538976288/256) in array constructor
. Wenn ich jedoch len(this%charArray)
oder len(tempElement)
drucke, sind beide 256 Zeichen lang. Wo kommt der 538976288 her?
Ich rufe normalerweise diese Prozedur mit etwas wie myObject%addToArray('hello')
. this%charArray
wird in der Typdefinition als character(len=256), dimension(:), allocatable :: charArray
deklariert und mit allocate(this%charArray(0))
zugewiesen.
Es könnte sich um einen Compiler-Fehler handeln. Welche gfortran Version? Beachten Sie, dass wir die Deklaration der charArray-Komponente von MyClass erraten. Beachten Sie, dass Fortran 2003 erlaubt 'this% charArray = [this% charArray, tmpElement]' – IanH
Es gibt sehr viele Fehler wie diese in verschiedenen Versionen wenn gfortran. Suchen Sie einfach in der Fehlerdatenbank. Eine Möglichkeit, diese Fehler zu begrenzen, besteht darin, eine feste Zeichenlänge zu verwenden. –
GFortran Version 6.30. charArray wird wie folgt deklariert: 'character (len = 256), dimension (:), allocatable :: charArray' und es wird mit' allocate (this% charArray (0)) 'zugewiesen (in Frage erklärt). –