1

我有一个程序,它有许多在声明中使用“种类”的函数,例如

real(kind=db) function vnorme(v)

这种类型的每个声明都会在使用 pgf90 编译期间导致错误(但是 ifort 可以正常工作):

PGF90-S-0087-需要常量表达式的非常量表达式 (general.f: 3161) PGF90-S-0081-非法选择器 - KIND 参数具有未知数据类型值 (general.f: 3161) 0 通知,0 警告, 2 人严重, 0 人对 vnorme 致命

db 在包含在单独源代码文件中的模块中定义:

integer, parameter:: db = selected_real_kind(15)

当我将 'db' 替换为 '8' 时,代码编译正确。似乎编译器不认为 db 已被声明,即使函数 vnorme 使用声明 db 的模块。有没有办法来解决这个问题?

4

1 回答 1

2

解析函数定义的第一行时,db 还不可见。

尝试


function vnorme(v)
  use module_with_db
  implicit none
  real(db) :: vnorme
  ...
end function vnorme

于 2011-06-17T19:01:04.007 回答