Fortran 错误#6404:此名称没有类型,必须具有显式类型

Fortran 错误#6404:此名称没有类型,必须具有显式类型,fortran,Fortran,我无法在下面的代码中消除此错误。有3个功能;dev、norm和clcMatA。前两个函数在第三个函数中调用。但它们不被视为功能。我像对其他函数一样定义了它们,但我以前没有遇到过这样的错误 错误: Error 1 error #6404: This name does not have a type, and must have an explicit type. [DEV] D:\Users\Vahid\Documents\Visual Studio 2008\Projects

我无法在下面的代码中消除此错误。有3个功能;dev、norm和clcMatA。前两个函数在第三个函数中调用。但它们不被视为功能。我像对其他函数一样定义了它们,但我以前没有遇到过这样的错误

错误:

Error   1    error #6404: This name does not have a type, and must have an explicit type.   [DEV]   D:\Users\Vahid\Documents\Visual Studio 2008\Projects\Tst\Tst\Source1.for    66  

Error   2    error #6404: This name does not have a type, and must have an explicit type.   [NORM]  D:\Users\Vahid\Documents\Visual Studio 2008\Projects\Tst\Tst\Source1.for    78
我真的很感激任何帮助。谢谢

代码(固定格式;.for):


源文件包含一个模块、一个程序和三个函数。您已注意在函数中使用关联模块,以便可以在函数中使用模块的参数。但是您没有编写任何语句,也没有构建代码,因此函数
clcMatA
具有
norm
dev
的任何知识。仅仅将所有三个函数的定义放入同一个源文件并不能提供编译器所需的信息

一个简单的解决方案是在模块中包含函数。在参数声明后插入一行包含单词
contains
,然后在
contains
end module
之间剪切并跳过函数的代码

当我写作时:

2014年,你们究竟为什么要使用固定格式源

在没有实际使用模块中定义的任何实体的函数中使用参数似乎很奇怪

您的函数
norm
是一种冗长的书写方式

norm = sqrt(sum(matrix*matrix))

请注意,我在这里使用名为
sum
的内在函数,我强烈建议不要将
sum
用作变量名。您不会混淆编译器,您可能会混淆自己。

您的函数
norm
dev
作为子程序不为
clcMatA
所知。你必须告诉它他们在干什么:

real*8, external :: dev, norm
但是,这还不够,因为函数
dev
norm
都需要显式接口,因为
dev
返回一个数组值结果,
norm
有一个带有可分配属性的伪参数(从上到下读取页面)。因此,您要么编写显式接口,使您的
clcMatA
更了解它们,要么将它们放在一个模块中


编辑:修复了错误的链接

谢谢。把他们包括在一个模块中是有效的。但是我也不得不把名字改成别的名字。我不知道为什么!这是默认接受.for或.obj文件的ABAQUS子例程的一部分。但也可以通过一些修改以自由格式编写。实际上,我还没有找到这两种格式之间的根本区别。我会的。谢谢你的提示。或者只使用Fortran 2008中的函数
norm2
。叹气-链接已经腐烂了。
real*8, external :: dev, norm