This question already has answers here:
Why is the type not accessible?
(2 个回答)
4年前关闭。
在 Windows 上使用 cygwin64 这个程序不会编译:
这让我感到困惑,因为类型是在运算符之前定义的。我对 Fortran 比较陌生,所以这个示例代码可能会有更多的错误。
here 发生了同样的问题,但将
Fortran 2008 标准,Cl 中对此进行了描述。 12.4.3.3“导入语句”:
接口(interface)块可能不包含可执行语句 - 因此您在那里的分配无效。此外,
(2 个回答)
4年前关闭。
在 Windows 上使用 cygwin64 这个程序不会编译:
program test
implicit none
!define my type
type myType
real::foo
integer::bar
end type myType
!define an operator for this type
interface operator (>)
logical function compare(a,b)
type(myType),intent(in) :: a,b
compare = a%foo>b%foo
end function compare
end interface operator (>)
!simple example of operator usage
type(myType) :: tfoo, tbar
tfoo = card(1.,2); tbar = card(3.,4)
print*, tfoo>tbar
end program test
gfortran
(唯一的参数是“std=f2008”)告诉我:type(myType),intent(in) :: a,b
1
Error: Derived type ‘mytype’ at (1) is being used before it is defined
这让我感到困惑,因为类型是在运算符之前定义的。我对 Fortran 比较陌生,所以这个示例代码可能会有更多的错误。
here 发生了同样的问题,但将
myType
封装在单独的模块中并没有解决问题。 最佳答案
您的代码有几个问题,但这个特殊错误是因为 myType
在主机范围内,而不是在接口(interface)块中。解决方案是将派生类型放在链接线程中建议的单独模块中,或者 import
来自主机作用域单元的派生类型:
interface operator (>)
logical function compare(a,b)
import myType
type(myType),intent(in) :: a,b
end function compare
end interface operator (>)
Fortran 2008 标准,Cl 中对此进行了描述。 12.4.3.3“导入语句”:
接口(interface)块可能不包含可执行语句 - 因此您在那里的分配无效。此外,
card
未在您的代码中定义。10-08 12:35