找不到Fortran用户定义类型我写了一些代码在一个文件中像这样当类型名重载作为构造
module ModuleBasicGeometry4
...
type TPoint
...
end type TPoint
interface TPoint
module procedure :: TPointInit1,TPointInit2
end interface TPoint
contains
...
end module ModuleBasicGeometry4
在另一个文件中,我想用我的用户自定义的派生类型TPoint。我只是用使用声明:
...
use ModuleBasicGeomentry4
type(TPoint) :: ...
...
然而,当我编译ifort2013_sp1.3.174这些文件,它告诉我,TPoint不是派生类型名称,如果我在第一个文件删除的接口声明,一切都很好。由于它们具有相同的名称,因此界面语句似乎会掩盖类型语句。更奇怪的是,我还在同一个第一个文件中定义了许多其他派生类型和相应的接口作为其构造函数,并且它们都工作正常。那么是什么导致了这个奇怪的问题?
P.S. 我想我找到了一些原因,但我不知道为什么。我说其他类型的工作是不正确的。在第二个文件,因为我需要一些过程指针,我写了这样的事情
...
interface
... function ...
use MoudleBasicGeometry4
...
end function ...
end interface
...
我发现,只有那些该接口声明之前使用的类型工作。只要第一个文件中定义的类型在该接口语句之后使用,ifort编译器就会给出错误消息:“这不是派生类型名称”。更重要的是,如果我在上面的接口语句中删除了使用ModuleBasicGeometry4语句,那么evetything也是可以的。有人可以解释为什么,并告诉我如何解决这个问题?非常感谢。
我想你的建议和它在你的情况与ifort工作。不幸的是,这并不适用于我的情况。不同的是,我的第二个文件也是模糊的。当我用导入语句替换有问题的use语句以使用第一个文件中定义的派生类型时,导入语句本身似乎不会导致任何错误,但是当我使用导入类型声明变量时,编译器会告诉“此派生类型名字还没有被宣布。“但是,在相同的第二个文件中定义的类型可以正确导入和使用。 – waltergu 2014-10-27 10:32:06
如果没有你的实际代码,我不能告诉你更多的东西,但要编译“-warn all”。 – credondo 2014-10-27 11:18:45
我不知道该说什么......似乎突然一切正常,进口声明。非常感谢你。 – waltergu 2014-10-27 15:22:13