gpt4 book ai didi

c - 通过 C 函数定义的 Fortran 派生类型构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:36 25 4
gpt4 key购买 nike

我想通过 C 函数定义派生类型构造函数。在下面的示例中,我设法通过 C 接口(interface)定义了一个重载的加法运算符。尽管语法非常相似,但构造函数的定义在 gfortran 4.9 下失败并出现以下错误:

test.f90:7.52:

module procedure my_module_fortran_new_my_double
1
Error: 'my_module_fortran_new_my_double' at (1) is not a module procedure

在谷歌搜索或查看之前关于堆栈溢出的帖子后,我没有找到任何解决方案。如果有人能告诉我是什么触发了这个错误以及如何纠正它,我将非常高兴。

这是我的模块的源代码:

module my_module
use iso_c_binding
type, bind(c) :: my_double
real(c_double) :: x
end type my_double
interface my_double
module procedure my_module_fortran_new_my_double
end interface
interface operator (+)
module procedure my_module_fortran_add
end interface operator (+)
interface
type(my_double) function my_module_fortran_new_my_double (v) bind ( c )
use iso_c_binding
import :: my_double
real (c_double), intent(in) :: v
end function my_module_fortran_new_my_double
type(my_double) function my_module_fortran_add (v1,v2) bind ( c )
use iso_c_binding
import :: my_double
type (my_double), intent(in) :: v1,v2
end function my_module_fortran_add
end interface
end module my_module

最佳答案

外部过程不是模块过程。我认为这就是您想要的:

module my_module
use iso_c_binding
type, bind(c) :: my_double
real(c_double) :: x
end type my_double

interface
type(my_double) function my_module_fortran_new_my_double (v) bind ( c )
use iso_c_binding
import :: my_double
real (c_double), intent(in) :: v
end function my_module_fortran_new_my_double
type(my_double) function my_module_fortran_add (v1,v2) bind ( c )
use iso_c_binding
import :: my_double
type (my_double), intent(in) :: v1,v2
end function my_module_fortran_add
end interface

interface my_double
procedure my_module_fortran_new_my_double
end interface
interface operator (+)
procedure :: my_module_fortran_add
end interface operator (+)

end module my_module

关于c - 通过 C 函数定义的 Fortran 派生类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com