我有一个自定义类型,我希望将值放在与我定义自定义类型的位置大致相同的位置,就像我可以使用标准类型一样。我理解这不是一个清晰的描述所以我可以为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
答案 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)