Fortran类型声明

时间:2013-12-22 03:31:18

标签: types fortran

我有一个自定义类型,我希望将值放在与我定义自定义类型的位置大致相同的位置,就像我可以使用标准类型一样。我理解这不是一个清晰的描述所以我可以为MyInt定义一个值,第一个程序将编译,但第二个程序不会。

谢谢,

约翰

将编译

program test
type :: MyType
    integer MyInt
end type MyType

integer :: MyInt = 2
type(MyType) :: a
a%MyInt = 3

write(*,*) a%MyInt, MyInt

end program test

无法编译

program test
type :: MyType
    integer MyInt
end type MyType

type(MyType) :: a
a%MyInt = 3
integer :: MyInt = 2

write(*,*) a%MyInt, MyInt

end program test

2 个答案:

答案 0 :(得分:2)

这是因为这两个连续的行:

a%MyInt = 3
integer :: MyInt = 2

您尝试在提供MyInt值后声明新变量a%MyInt 。 Fortran要求您将所有变量声明放在第一个,然后再定义变量。

答案 1 :(得分:2)

在你对Kyle的评论中,你问过如何在初始化派生类型的变量后声明一个新变量。您可以通过在声明它的同一行初始化a来实现。语法是:

type(MyType) :: a = MyType(3)

您甚至可以用相同的方式初始化具有多个组件的类型:

type NewType
    integer :: MyInt
    character(len=20) :: name
end type

type(NewType) :: b = NewType(7, "Foo")

类型构造函数的参数的传递顺序与它们在类型规范中声明的顺序相同,或者使用关键字参数传递:

type(NewType) :: c = NewType(name="bar", MyInt=12)