Je suis en train de compiler mon programme avec le compilateur Fortran Intel pour Linux (version 12.0.3) et je reçois cette erreur:erreur du compilateur Fortran
buggy.f90(206): error #6219: A specification expression object must be a dummy
argument, a COMMON block object, or an object accessible through host or use
association [SPECTRUM]
type(spect) :: spectrum
----------------------------------------^
C'est dans un module. type(spect)
vient d'un autre module, que je use
au début du module gênant. Voici du code; Vous trouverez plus de détails ci-dessous.
module non_buggy
implicit none
type axis
character(len=6) :: nucleus
integer :: num_data_points
real :: spectral_width
end type axis
type spect
integer :: num_dim
type(axis), allocatable :: axes(:)
real, allocatable :: intensity(:)
character(len=10) :: type = ''
end type spect
type(spect), target :: spectrum ! might this be a cause of error?
contains
! ...
end module non_buggy
module buggy
use non_buggy
implicit none
contains
subroutine no_problem_here()
type(spect) :: spectrum ! compiles beautifully
! ...
end subroutine no_problem_here
subroutine problem()
type(spect) :: spectrum ! does not compile, but no error if I change the variable name
! ...
end subroutine problem
end module buggy
J'ai lu au sujet de ce que signifie l'erreur, mais j'ai l'impression qui ne s'applique pas à ce que je fais dans mon code - pas de limites de tableau sont spécifiés sur ces lignes. Comme l'erreur disparaît si je renomme la deuxième occurrence de spectrum
à autre chose, je me demandais si le problème pourrait avoir quelque chose à voir avec la variable de module spectrum
dans le module non_buggy
(mais alors l'erreur persiste, même si je commente la ligne dans lequel la variable de module est déclarée). Si un expert Fortran pouvait clarifier cette question, je serais très reconnaissant.
Merci beaucoup d'avance!
L'erreur est ailleurs. J'ai même essayé de compiler vos modules. Mais je suis sûr que la source du problème est ailleurs. Parce qu'il n'y a rien de mal à la paix du code que vous avez partagé. Plus de code, s'il vous plaît, si possible. – Wildcat
@kemiisto Vous aviez absolument raison! J'ai trouvé le problème, il y avait trois lignes au-dessous de la ligne indiquée par le compilateur. Là, j'ai effectivement utilisé une partie de 'spectre' dans une déclaration de limites tableau - bien sûr, la taille n'a pas été spécifiée au moment de la compilation ... – canavanin