【发布时间】:2014-10-19 04:08:28
【问题描述】:
我正在使用派生类型(bicomplex)和赋值运算符(=)的重载,因此可以将real*8 分配给bicomplex。 bicplx模块的MWE如下:
MODULE bicplx
type bicomplex
COMPLEX*16 :: a
COMPLEX*16 :: b
end type
interface assignment(=)
module procedure dble_assign_bicplx
end interface
contains
subroutine dble_assign_bicplx(qleft, xright)
implicit none
type(bicomplex), intent(out) :: qleft
double precision, intent(in) :: xright
qleft%a = xright
qleft%b = 0.0d0
return
end subroutine dble_assign_bicplx
end MODULE
实数到复数的赋值由 Fortran 固有地处理。此方法在用于“典型”双复变量时效果很好,但当我想将 real*8 分配给具有 PARAMETER 属性的双复时会中断:
TYPE(bicomplex) :: test1
test1 = 1.d0
完美运行,但是:
TYPE(bicomplex), parameter :: test1 = 1.d0
无法编译并给出 2 个错误:Error: Incompatible derived type in PARAMETER at (1) 和 Error: Can't convert REAL(8) to TYPE(bicomplex) at (1)。
然而,
TYPE(bicomplex), parameter :: test1 = bicomplex(1.d0, 0.d0)
完美运行。
我是否遗漏了什么,或者它是标准的一部分,不能通过使用重载赋值运算符来分配参数?理想情况下,我想使用 F90/F95(而不是 2003 或 2008)来解决这个问题。
【问题讨论】:
-
我认为它必须是一个函数
type(bicomplex) function dble_assign_bicplx(qleft, xright) -
如果定义的赋值是由函数指定的,那么你将如何控制函数结果的赋值到赋值左侧的东西上?
标签: fortran derived-types