我正在努力使一个简单的面向对象程序起作用。
我在文件testmod.f中有一个模块:
module testmod
implicit none
type testobject
real :: X
contains
procedure, public, pass(this) :: initialize
procedure :: print
end type testobject
contains
subroutine initialize(this, x)
class(testobject) :: this
real :: x
this%X = x
end subroutine initialize
subroutine print(this)
class(testobject) :: this
print *, this%x
end subroutine print
end module testmod
要测试代码,我有以下测试程序:
program test
use testmod
type(testobject) :: testobj
call testobj%initilize(0.0)
end program test
我使用gfortran编译模块:
gfortran -ffree-form testmod.f -shared
和测试程序:
gfortran -ffree-form test.f
上次gfortran调用的结果如下:
/tmp/ccGPbBvF.o: In function `MAIN__':
test.f:(.text+0xb): undefined reference to `__testmod_MOD___vtab_testmod_Testobject'
test.f:(.text+0x2a): undefined reference to `__testmod_MOD_initialize'
collect2: error: ld returned 1 exit status
另一方面,如果我调用testobj%initilize(“ x”),则由于未按预期方式使用实数调用子例程而收到错误消息。
我想我应该在其他问题上给gfortran打电话吗?