27 | type(c_ptr) :: fullName | 1 Error: Unexpected data declaration statement at (1) ReadWrite.f90:28:42:
时间: 2024-02-10 16:09:30 浏览: 153
C++11 std::shared_ptr总结与使用示例代码详解
这个错误提示意味着你在 `interface` 块中使用了不支持的数据声明语句。在 `interface` 块中,你只能声明函数的签名,不能声明变量。如果你需要声明变量,应该将其放在 `function` 块内部。具体来说,你可以将 `fullName` 的声明从 `interface` 块中移除,并将其放到 `function` 块的开头,像这样:
```
interface
function my_cpp_read(fullName) bind(C, name="my_cpp_read")
use, intrinsic :: iso_c_binding, only: c_ptr, c_char
implicit none
type(c_ptr), value :: fullName
logical(c_bool) :: my_cpp_read
import :: C_CHAR
! 将 Fortran 字符串转换为 C 字符串
character(kind=c_char), dimension(:), pointer :: fullName_c
integer(c_int) :: fullName_len
fullName_c = c_f_pointer(fullName, [fullName_len])
fullName_c(fullName_len+1) = c_null_char ! 添加字符串终止符
! 调用 C++ 函数
my_cpp_read = my_cpp_read(fullName_c)
end function my_cpp_read
end interface
function my_cpp_read(fullName) bind(C, name="my_cpp_read")
use, intrinsic :: iso_c_binding, only: c_ptr, c_char
implicit none
type(c_ptr), value :: fullName
character(kind=c_char), dimension(:), pointer :: fullName_c
integer(c_int) :: fullName_len
logical(c_bool) :: my_cpp_read
! 将 Fortran 字符串转换为 C 字符串
fullName_c = c_f_pointer(fullName, [fullName_len])
fullName_c(fullName_len+1) = c_null_char ! 添加字符串终止符
! 调用 C++ 函数
my_cpp_read = my_cpp_read(fullName_c)
end function my_cpp_read
```
在这个例子中,我们将 `fullName` 的声明从 `interface` 块中移除,并将其放到了 `function` 块的开头。注意,为了能够正确地将 Fortran 字符串转换为 C 字符串,我们需要在 `function` 块中声明 `fullName_c` 和 `fullName_len` 两个变量。同时,我们也需要在 `function` 块中重新声明 `my_cpp_read` 的类型。
阅读全文