heroinhell 发表于 2016-9-2 18:02:03

如何实现一个数据结构的共享(不同文件中)

本人刚接触fortran不就,请教大家个问题:!======================================
我自己定义了一个数据结构,比如:

    typetttt
      integer:: num
      character(len=15) :: name1
    end type tttt


然后我希望在主程序中使用该结构,比如:

program hello

   !!下面两行会出错,因为tttt没有定义
    type(tttt),pointer::ps
    type(tttt),target :: s

    s%num=1
    s%name1="wangwei"
    ps=>s

   !!!我还想对结构体指针利用过程重新赋值,代码如下
   call mod_struct(ps)

endprogram hello

子过程如下:
subroutinemod_struct(struct)
      type(tttt),pointer:: struct
      struct%name1="xie"
end

!====================================
中间会牵涉到这么几个知识点,我不太明白:

1)如何将定义的结构体,比如保存到头文件里,随时可以使用?即全局变量和共享数据结构的问题。
2)假如第一步成功了,我的mod_struct对不对?
   我曾把结构体的定义放到program和sunroutine里,这样编译是能过去的,胆汁性会有segment fault。
    原因大概是指针没有指到实体,所以报错了。我怎样改才可以?










fcode 发表于 2016-9-2 18:02:04

传递指针的话,需要用 interface,而书写到 module 里,可以避免手动书写 interface

module typedef
Implicit None
typetttt
    integer:: num
    character(len=15) :: name1
end type tttt
end module typedef

module mod_struct_mod
use typedef
Implicit None
contains
subroutinemod_struct(struct)
    type(tttt),pointer:: struct
    struct%name1="xie"
end subroutine mod_struct
end module mod_struct_mod

program hello
use mod_struct_mod
type(tttt),pointer::ps
type(tttt),target :: s
s%num=1
s%name1="wangwei"
ps=>s
call mod_struct(ps)
write(*,*) ps
end program hello

vvt 发表于 2016-9-2 19:34:04

本帖最后由 vvt 于 2016-9-2 19:35 编辑

定义在 module 里就可以了。然后两个程序都 use 这个 module

module typedef
typetttt
         integer:: num
         character(len=15) :: name1
   end type tttt
end module typedef

program hello
use typedef
    type(tttt),pointer::ps
   type(tttt),target :: s

   s%num=1
   s%name1="wangwei"
   ps=>s

    !!!我还想对结构体指针利用过程重新赋值,代码如下
   call mod_struct(ps)

endprogram hello

subroutinemod_struct(struct)
use typedef
         type(tttt),pointer:: struct
         struct%name1="xie"
end

heroinhell 发表于 2016-9-5 08:44:51

vvt 发表于 2016-9-2 19:34
定义在 module 里就可以了。然后两个程序都 use 这个 module

module typedef


谢谢!第一个问题已经解决l了,第二个问题是因为struct在mod_struct里只是声明个指针,没有明确的target,所以在用的时候报The procedure has a dummy argument that has the ALLOCATABLE, ASYNCHRONOUS, OPTIONAL, POINTER, TARGET, VALUE or VOLATILE attribute
警告或错误,其实struct只是实参,当如何修改就会使这个错误消失呢?

heroinhell 发表于 2016-9-7 19:36:43

fcode 发表于 2016-9-5 09:01
传递指针的话,需要用 interface,而书写到 module 里,可以避免手动书写 interface



谢谢帮助!已经解决!
页: [1]
查看完整版本: 如何实现一个数据结构的共享(不同文件中)