48 | type(c_ptr) :: const_char_ptr = transfer(my_char_ptr, c_ptr) | 1 Error: Derived type ‘c_ptr’ is used as an actual argument at (1) ReadWrite.f90:49:60:
时间: 2024-02-10 19:10:25 浏览: 129
浅析Boost智能指针:scoped_ptr shared_ptr weak_ptr
这个错误是因为在Fortran中,不能将c_ptr类型的变量作为实参传递给程序中的子程序。在你的代码中,`transfer`函数是一个子程序,而`my_char_ptr`是一个c_ptr类型的变量。因此,当你将`my_char_ptr`作为`transfer`函数的实参传递时,编译器会报错。
要解决这个问题,你可以将`my_char_ptr`转换为一个整数类型的变量,然后将这个整数变量作为实参传递给`transfer`函数。例如:
```
integer(c_intptr_t) :: my_ptr_int
type(c_ptr) :: const_char_ptr
my_ptr_int = transfer(my_char_ptr, my_ptr_int)
const_char_ptr = c_ptr(my_ptr_int)
```
这样就可以避免将c_ptr类型的变量作为实参传递的问题了。请注意,在将c_ptr类型的变量转换为整数类型变量时,需要使用`c_intptr_t`类型,这是一个整数类型,可以用来存储指针的值。
阅读全文