PROCEDURE attribute conflicts with INTENT attribute in ‘input_string’ at (1)
时间: 2024-11-13 10:40:53 浏览: 4
在 Fortran 中,"PROCEDURE" 和 "INTENT" 属性通常用于函数声明或子程序调用中。"PROCEDURE" 关键字用于指定一个子程序作为另一个子程序的一部分或表达式的一部分,而 "INTENT" 关键字则是为了描述函数或子程序参数的目的,如 IN(输入)、OUT(输出)或 INOUT(输入输出)。
当你说 "PROCEDURE attribute conflicts with INTENT attribute in 'input_string'",这表明在某个地方,你试图同时给 'input_string' 参数指定了一个过程(Procedure)和意图(Intent),可能是调用了一个期望接受或返回过程的函数,但同时也指定了它的输入、输出或输入输出属性。在 Fortran 的标准语法中,一个参数只能有一个 "PROCEDURE" 或 "INTENT" 属性。
例如:
```fortran
subroutine foo(input_string)
procedure :: input_string ! 这里是指定 input_string 是一个过程
intent(IN) :: input_string ! 这里又设置了 input_string 的意图为输入
! 这是错误的,因为不能同时存在
end subroutine foo
```
修复这个问题的方法是删除一个属性,保持一致性。如果 'input_string' 应该是一个过程,那么就去掉 "intent" 关键字;如果它应该作为一个普通的参数,那就去掉 "procedure" 关键字,改为直接引用子程序名:
```fortran
subroutine foo(input_string_procedure)
procedure(input_string_procedure) :: input_string_procedure ! 只保留 procedure 关键字
or
subroutine foo(input_string)
character(len=*), intent(IN) :: input_string ! 仅保留 intent 关键字
```
请检查你的代码,确保 'input_string' 只有一个明确的定义,并与你实际想要的行为一致。
阅读全文