我真的希望能够在Fortran模块中定义一些参数,以便主程序及其所有子程序都可以访问它们。
问题在于,即使我尝试在程序体中声明它们,例如:
type (mp_real), parameter :: p1 = 1.98342E+5 !(or say 1.1d0)
我收到以下错误:
错误:无法在(1)将REAL(4)转换为TYPE(mp_real)
基本上我在程序体中设置参数的值没有问题,但如果我尝试在变量声明区域内进行,gfortran
就不高兴了。这阻止我在模块中定义它们。
有没有办法用mpreal
设置模块内的参数值,或者我应该重写整个程序?
答案 0 :(得分:1)
我最好的猜测是您正在使用mpfun库,它定义了mp_real
类型的确切使用方式。
然后,它们重载赋值运算符以便能够转换类型。此编译器在编译时不可用,这会导致您获得错误。
以下是一个例子来说明这一点:
module test_mod
type my_type
integer :: val
end type
interface assignment (=)
module procedure my_assign
end interface
contains
subroutine my_assign( t, v )
type(my_type),intent(out) :: t
integer, intent(in) :: v
end subroutine
end module
program test
use test_mod
type(my_type),parameter :: t = 1
end program
据我所知,不可能以您建议的方式使用派生类型。但是,您可以将p1
存储为实数,并使用初始化子例程...