2017-06-21 4 views
1

Le script suivant crée un type dérivé tente alors de la sortie de son namelist à un fichier texte:`Erreur: NAMELIST inattendue statement` dans GNUFortran

program test 
    implicit none 
    character(len=:), allocatable :: CurrentString 
    integer :: linelength, IO 

    type SubjectType 
      character(20) :: genre 
      character(20) :: maindude 
    end type SubjectType 

    type BookType 
      character(20) :: title 
      character(20) :: author 
      type(SubjectType) :: subject 
      integer, dimension(2,2):: array 
      integer :: BookID 

    end type Booktype 

    type(Booktype) :: Book 

    Book%title = "Harry Potter" 
    Book%author = "JK Rowling" 
    Book%subject%genre = "Fantasy" 
    Book%subject%maindude = "Ron Weasley" 
    Book%array = RESHAPE([1,2,3,4],[2,2]) 
    Book%BookID = 105 
    open(10, file = 'namelist.txt') 

    namelist /mynamelist/ Book 
    write(10, nml = mynamelist) 
    close(10, status = 'keep') 
end program test 

Lors de la compilation mais il renvoie une erreur:

||=== Build: Debug in Hello (compiler: GNU Fortran Compiler) ===|

D:\TEMP\Hello\main.f95|30|Error: Unexpected NAMELIST statement |

D:\TEMP\Hello\main.f95|31|Error: Symbol 'mynamelist' must be a

NAMELIST group name| ||=== Build failed: 2 error(s), 0 warning(s) (0

minute(s), 2 second(s)) ===|

Un google search n'est vraiment pas très utile. Les seuls forums que j'ai trouvés expliquent pourquoi cela se produit, mais pas comment y remédier. Comment puis-je faire fonctionner ceci dans GFortran? S'il vous plaît noter que cela fonctionne dans IFort.

Répondre

1

NAMELIST est une déclaration de déclaration. Il ne peut pas être placé entre des instructions exécutables. Il ne peut être utilisé qu'au début de chaque unité avant la première instruction exécutable.

type(Booktype) :: Book 

namelist /mynamelist/ Book 

Book%title = "Harry Potter" 

... 

open(10, file = 'namelist.txt') 
write(10, nml = mynamelist) 
close(10, status = 'keep')